Datei Verschlüsselung

  • Guten Tag Allerseits!

    Wie ihr schon im ThreadTitle gelesen habt, arbeite ich grade an einem Datei Verschlüsselungs Script.

    Mit Txt Dateien geht das ja schon wunderbar; mit allen anderen allerdings nicht ;)

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <String.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("Lenny's FileCrypter", 632, 345, 194, 132, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
    $Pic1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Lenny\Eigene Dateien\Lenny's.jpg", 0, 0, 632, 150, BitOR($SS_NOTIFY, $SS_SUNKEN, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS), $GUI_WS_EX_PARENTDRAG)
    $Button1 = GUICtrlCreateButton("Datei zum Verschlüsseln wählen", 40, 160, 243, 25, $WS_BORDER)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Button2 = GUICtrlCreateButton("Datei zum Entschlüsseln wählen", 344, 160, 243, 25, $WS_BORDER)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    Global $Input1 = GUICtrlCreateInput("Pfad", 40, 200, 545, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    Global $Slider1 = GUICtrlCreateSlider(344, 240, 238, 45, BitOR($TBS_AUTOTICKS, $TBS_BOTH))
    GUICtrlSetLimit(-1, 3, 1)
    $Label1 = GUICtrlCreateLabel("Wählen sie den Grad der Verschlüsselung:", 40, 248, 298, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    Global $Progress1 = GUICtrlCreateProgress(40, 304, 294, 17)
    $Button3 = GUICtrlCreateButton("Close me.", 352, 304, 227, 17, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    TrayTip("Info", "Wählen sie den Grad der Verschlüsselung.", 5, 1)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ToolTip("")
    _verschluesseln()
    Case $Button2
    ToolTip("")
    _entschluesseln()
    Case $Button3
    Exit
    Case $Slider1
    $position = GUICtrlRead($Slider1)
    If $position = 1 Then $txt = "Leicht"
    If $position = 2 Then $txt = "Mittel"
    If $position = 3 Then $txt = "Schwer"
    ToolTip($txt)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _verschluesseln()
    $postion = 0

    $position = GUICtrlRead($Slider1)

    [/autoit] [autoit][/autoit] [autoit]

    $Ort = FileOpenDialog("Datei zum Verschlüsseln auswählen", "", "Alle Dateien (*.*)", 1)

    If @error Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Input1, $Ort)

    [/autoit] [autoit][/autoit] [autoit]

    $Datei = FileOpen($Ort, 16)

    $FSize = FileGetSize($Ort)

    _FileCreate($Ort & ".lfc")

    [/autoit] [autoit][/autoit] [autoit]

    For $s = 1 To 1000000000000 Step 1
    $line1 = FileReadLine($Datei, $s)
    If @error = -1 Then

    [/autoit] [autoit][/autoit] [autoit]

    $linecounter = $s
    ExitLoop
    EndIf
    Next

    $setting = 100 / $linecounter

    For $i = 1 To $linecounter

    $line = FileReadLine($Datei, $i)

    $postion += $setting

    GUICtrlSetData($Progress1, $postion)
    If @error = -1 Then $i = 500000

    [/autoit] [autoit][/autoit] [autoit]

    $Text = _StringEncrypt(1, $line, "test", $position)

    [/autoit] [autoit][/autoit] [autoit]

    $newop = FileOpen($Ort & ".lfc", 1)

    FileWrite($newop, $Text & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($newop)
    Next
    FileClose($Datei)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ FileDelete($Ort)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Progress1, 0)
    EndFunc ;==>_verschluesseln

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _entschluesseln()

    [/autoit] [autoit][/autoit] [autoit]

    $postion = 0

    $position = GUICtrlRead($Slider1)

    [/autoit] [autoit][/autoit] [autoit]

    $Ort = FileOpenDialog("Wählen sie die Datei zum DeCrypten aus", "", "Lenny File Crypter (*.lfc)", 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Input1, $Ort)

    [/autoit] [autoit][/autoit] [autoit]

    $Datei = FileOpen($Ort, 4)

    For $s = 1 To 1000000000000 Step 1
    $line1 = FileReadLine($Datei, $s)
    If @error = -1 Then

    [/autoit] [autoit][/autoit] [autoit]

    $linecounter = $s
    ExitLoop
    EndIf
    Next

    $setting = 100 / $linecounter

    ;~ MsgBox(0, "", $linecounter)

    $string1 = StringTrimRight($Ort, 4)

    _FileCreate($string1)

    For $i = 1 To $linecounter

    $postion += $setting

    GUICtrlSetData($Progress1, $postion)

    $line = FileReadLine($Datei, $i)

    ;~ MsgBox(0, "", $line)

    $Text = _StringEncrypt(0, $line, "test", $position)

    ;~ MsgBox(0, "", $Text)

    $newop = FileOpen($string1, 1 + 8)

    FileWrite($newop, $Text)

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($newop)
    Next
    FileClose($Datei)
    FileDelete($Ort)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Progress1, 0)

    EndFunc ;==>_entschluesseln

    [/autoit]

    1. Es ist kompliziert
    2. Es dauert lange
    3. Das ist mir aber relativ egal am wichtigsten ist mir Punkt 4
    4. Wenn ich eine Datei gecryptet habe, und sie wieder entcrypten will, ist die nur nohc halb so groß wie vorher.

    Erkennt StringEncrypt keine Leerzielen ? Oder wodran könnte es liegen ?

    Vielen Dank im Vorraus,

    LG,

    Lenny

    Jaja, Moo does the Cow!

  • Hi.

    Ich denke ich bin meinem Problem schon einwenig näher gekommen!


    Bei dem Text BILD WIRD NICHT ANGEZEIGT http://img3.imagebanana.com/img/caz4ihft/Text.JPG

    Ließt er nur ÿØÿà; Mehr konnt ich auch nicht kopieren. Wenn die ganze obere zeile kopiere und dann einfüge kommt das bei raus: ÿØÿà

    Vllt muss ich die Datei im Raw Reading mode lesen; HAbe ich schon probiert, denn macht er garnichts mehr.

    Oder was könnte das problem sein ?


    Vielen Dank,

    Lg,

    Lenny

    Jaja, Moo does the Cow!

  • Die Kristallkugel fragt. Wie soll ich helfen, wenn ich nicht weiß wieweit das Script fertig ist udn wie es aus schaut?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hi!

    Ich denke es gibt wenig veränderungen zum ersten Post aber ich poste hier noch mal den source:

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=MyIcon1.ico
    #AutoIt3Wrapper_Res_Comment=-
    #AutoIt3Wrapper_Res_Description=Txt File Crypter
    #AutoIt3Wrapper_Res_Fileversion=0.9.0.0
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <String.au3>
    #include <File.au3>
    FileInstall("C:\Dokumente und Einstellungen\Lenny\Eigene Dateien\Lenny's.jpg", @TempDir & "\lennys.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("Lenny's TextFile Crypter", 632, 345, 194, 132, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
    $Pic1 = GUICtrlCreatePic(@TempDir & "\lennys.jpg", 0, 0, 632, 150, BitOR($SS_NOTIFY, $SS_SUNKEN, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS), $GUI_WS_EX_PARENTDRAG)
    $Button1 = GUICtrlCreateButton("Datei zum Verschlüsseln wählen", 40, 160, 243, 25, $WS_BORDER)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Button2 = GUICtrlCreateButton("Datei zum Entschlüsseln wählen", 344, 160, 243, 25, $WS_BORDER)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    Global $Input1 = GUICtrlCreateInput("Pfad", 40, 200, 545, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    Global $Slider1 = GUICtrlCreateSlider(344, 240, 238, 45, BitOR($TBS_AUTOTICKS, $TBS_BOTH))
    GUICtrlSetLimit(-1, 3, 1)
    $Label1 = GUICtrlCreateLabel("Wählen sie den Grad der Verschlüsselung:", 40, 248, 298, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    Global $Progress1 = GUICtrlCreateProgress(40, 304, 294, 17)
    $Button3 = GUICtrlCreateButton("Close me.", 352, 304, 227, 17, 0)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    TrayTip("Info", "Wählen sie den Grad der Verschlüsselung.", 5, 1)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ToolTip("")
    _verschluesseln()
    Case $Button2
    ToolTip("")
    _entschluesseln()
    Case $Button3
    FileDelete(@TempDir & "\lennys.jpg")
    Exit
    Case $Slider1
    $position = GUICtrlRead($Slider1)
    If $position = 1 Then $txt = "Leicht"
    If $position = 2 Then $txt = "Mittel"
    If $position = 3 Then $txt = "Schwer"
    ToolTip($txt)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _verschluesseln()
    $postion = 0

    $position = GUICtrlRead($Slider1)

    [/autoit] [autoit][/autoit] [autoit]

    $Ort = FileOpenDialog("Datei zum Verschlüsseln auswählen", "", "TextFiles (*.txt)", 1)

    If @error Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Input1, $Ort)

    [/autoit] [autoit][/autoit] [autoit]

    $Datei = FileOpen($Ort, 0)
    If @error Then MsgBox(0,"",@error)
    $FSize = FileGetSize($Ort)

    _FileCreate($Ort & ".lfc")

    [/autoit] [autoit][/autoit] [autoit]

    For $s = 1 To 1000000000000 Step 1
    $line1 = FileReadLine($Datei, $s)
    If @error = -1 Then

    [/autoit] [autoit][/autoit] [autoit]

    $linecounter = $s
    ExitLoop
    EndIf
    Next

    $setting = 100 / $linecounter

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $linecounter

    $line = FileReadLine($Datei, $i)

    $postion += $setting

    GUICtrlSetData($Progress1, $postion)
    If @error = -1 Then $i = 500000

    [/autoit] [autoit][/autoit] [autoit]

    $Text = _StringEncrypt(1, $line, "test", $position)

    [/autoit] [autoit][/autoit] [autoit]

    $newop = FileOpen($Ort & ".lfc", 1)

    FileWrite($newop, $Text & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($newop)
    Next
    FileClose($Datei)

    [/autoit] [autoit][/autoit] [autoit]

    FileDelete($Ort)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Progress1, 0)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_verschluesseln

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _entschluesseln()

    [/autoit] [autoit][/autoit] [autoit]

    $postion = 0

    $position = GUICtrlRead($Slider1)

    [/autoit] [autoit][/autoit] [autoit]

    $Ort = FileOpenDialog("Lenny Crypter Files", "", "Alle Dateien (*.lfc)", 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Input1, $Ort)

    [/autoit] [autoit][/autoit] [autoit]

    $Datei = FileOpen($Ort, 0)

    $string1 = StringTrimRight($Ort, 4)

    _FileCreate($string1)

    For $s = 1 To 1000000000000 Step 1
    $line2 = FileReadLine($Datei, $s)
    If @error = -1 Then

    [/autoit] [autoit][/autoit] [autoit]

    $linecounter1 = $s
    ExitLoop
    EndIf
    Next

    $setting = 100 / $linecounter1

    [/autoit] [autoit][/autoit] [autoit]

    $newop = FileOpen($string1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $linecounter1

    $postion += $setting

    GUICtrlSetData($Progress1, $postion)

    $line = FileReadLine($Datei, $i)

    $Text = _StringEncrypt(0, $line, "test", $position)

    FileWrite($newop, $Text)

    [/autoit] [autoit][/autoit] [autoit]

    Next
    FileClose($newop)
    FileClose($Datei)
    FileDelete($Ort)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Progress1, 0)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_entschluesseln

    [/autoit]

    Lg,


    Lenny

    Jaja, Moo does the Cow!

  • Hallo Nenny.

    Dickes SORRY. Ich hatte gedacht, das sich bereits eine Veränderung ergeben hatte.

    Möchtest Du selber ein Script schreiben oder benötigst Du ein Programm, das Texte codiert? Weil ich habe irgendwo noch ein Script, das ich mir mal gespeichert hatte, wo man Texte codieren kann. Ich schreibe es mal hier rein und evtl. kannst Du damit etwas anfangen.

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Function Name: _Crypt()
    ; Description: Encrypt or Decrypt's file.
    ; Parameter(s): $keyfile - Key file, made with _CryptKeyGen()
    ; $crypt - Either 1=Encrypt or 0=Decrypt.
    ; $innfile - Input file.
    ; $outfile - Output file.
    ; Date: 17.03.2007
    ; Version: V.1.00
    ;
    ;===============================================================================
    Func _Crypt( $keyFile, $crypt, $innfile, $outfile )

    $fread = FileOpen($innfile,0)
    $fwrite = FileOpen($outfile,2)
    $cryptKey = FileReadLine($keyFile,1)
    $key = StringSplit($cryptKey,',',1)
    Dim $decryptkey[256]
    _ArrayDelete($key,0)
    For $i = 0 To 255
    $decryptkey[$key[$i]] = $i
    Next
    $begin = TimerInit()
    If $crypt = '1' Then
    While 1
    $chars = FileRead($fread, 1)
    If @error = -1 Then ExitLoop
    FileWrite($fwrite,Chr($key[Asc($chars)]))
    WEnd
    ElseIf $crypt = '0' Then
    While 1
    $chars = FileRead($fread, 1)
    If @error = -1 Then ExitLoop
    FileWrite($fwrite,Chr($decryptkey[Asc($chars)]))
    WEnd
    EndIf
    $dif = TimerDiff($begin)

    FileClose($fread)
    FileClose($fwrite)

    [/autoit] [autoit][/autoit] [autoit]

    Return $dif

    EndFunc ;==> _Crypt()

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Function Name: _CryptKeyGen()
    ; Description: Creates a keyfile neede for the _Crypt() function.
    ; Parameter(s): $keyfile - Key file, made with _CryptKeyGen()
    ; $cryptlevel - Feature not used.
    ; Requirement(s): None.
    ; Return Value(s): On Success - Handle not added yet.
    ; On Failure - Errorhandling not added.
    ;
    ;===============================================================================
    Func _CryptKeyGen($keyFile,$cryptlevel = 1)

    $tablelength = 255

    Dim $table[$tablelength + 1],$num
    FileOpen($keyFile,2)
    For $x = 1 To $cryptlevel
    $num = -1
    For $i = 0 To $tablelength
    $num +=1
    $table[$i] = $num
    Next
    For $i = 0 To $tablelength
    $random = Random(0,$tablelength,1)
    $tableold = $table[$i]
    $tablenew = $table[$random]

    $table[$random] = $tableold
    $table[$i] = $tablenew
    Next
    For $i = 0 To $tablelength
    If $i < $tablelength Then
    FileWrite($keyFile,$table[$i]&',')
    Else
    FileWrite($keyFile,$table[$i])
    EndIf
    Next
    FileWrite($keyFile,@CRLF)
    Next
    EndFunc ;==> _CryptKeyGen()

    [/autoit]

    Hatte ich, wie geschrieben mal gespeichert und evtl. ist es das was Du brauchst.

    LG und einen sonnigen Wochenstart.
    Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Lenny: Mir war gerade ein wenig langweilig und da habe ich Deine Funktionen mal neu geschrieben:

    Wenn Du es selbst lösen willst, darfst Du den Spoiler nicht öffnen! ;)

    Spoiler anzeigen
    [autoit]


    Func _verschluesseln()
    Local $iProgress, $iCryptLevel, $sFilePath, $iFileSize, $hSource, $hTarget, $sFileBlock
    GUICtrlSetState($Button1, $GUI_DISABLE) ; Button deaktivieren
    $sFilePath = FileOpenDialog("Datei zum Verschlüsseln auswählen", "", "Alle Dateien (*.*)", 1)
    If Not @error Then
    GUICtrlSetData($Input1, $sFilePath)
    $iCryptLevel = GUICtrlRead($Slider1) ; Verschlüsselungs-Level holen
    $iFileSize = FileGetSize($sFilePath) ; Dateigröße auslesen
    $hSource = FileOpen($sFilePath, 16) ; Quelldatei im Binary-Mode öffnen
    $hTarget = FileOpen($sFilePath & ".lfc", 2+8) ; Zieldatei zum Schreiben öffnen
    FileWriteLine($hTarget, $iCryptLevel) ; den benutzten Verschlüsselungs-Level abspeichern
    While True
    $sFileBlock = FileRead($hSource, 64) ; einen 64 Byteblock aus der Quelldatei lesen
    If @error = -1 Then ExitLoop ; Wenn @error = 1, dann Dateiende erreicht / Schleife verlassen
    FileWriteLine($hTarget, _StringEncrypt(1, $sFileBlock, "test", $iCryptLevel)) ; den Block verschlüsseln und speichern
    $iProgress += 64 ; Wert für die Progressbar addieren
    GUICtrlSetData($Progress1, Int(100/$iFileSize*$iProgress)) ; und anzeigen
    WEnd
    FileClose($hTarget) ; Zieldatei schließen
    FileClose($hSource) ; Quelldatei schließen
    GUICtrlSetData($Progress1, 100) ; Progressbar auf 100% setzen
    EndIf
    GUICtrlSetState($Button1, $GUI_ENABLE) ; Button wieder aktivieren
    EndFunc ;==>_verschluesseln

    [/autoit] [autoit][/autoit] [autoit]

    Func _entschluesseln()
    Local $iProgress, $iCryptLevel, $sFilePath, $iFileSize, $hSource, $hTarget, $sFileBlock, $sPos, $sTarget
    GUICtrlSetState($Button2, $GUI_DISABLE) ; Button deaktivieren
    $sFilePath = FileOpenDialog("Wählen sie die Datei zum DeCrypten aus", "", " (*.lfc)", 1)
    If Not @error Then
    GUICtrlSetData($Input1, $sFilePath)
    $iFileSize = FileGetSize($sFilePath) ; Dateigröße auslesen
    $hSource = FileOpen($sFilePath, 0) ; Quelldatei öffnen
    $iCryptLevel = FileReadLine($hSource) ; den gespeicherten Verschlüsselungs-Level auslesen
    $sTarget = StringTrimRight($sFilePath, 4) ; Dateiendung (.lfc) entfernen
    If FileExists($sTarget) Then ; Wenn die Zieldatei bereits existiert, dann...
    $sPos = StringInStr($sTarget, ".", 0, -1) ; Position der Dateiendung
    $sTarget = StringLeft($sTarget, $sPos - 1) & "_Neu." & StringRight($sTarget, StringLen($sTarget)-$sPos) ; "_Neu" hinzufügen
    EndIf
    $hTarget = FileOpen($sTarget, 2+8+16) ; Zieldatei im Binary-Mode öffnen
    While True
    $sFileBlock = FileReadLine($hSource) ; eine Zeile aus der Quelldatei lesen
    If @error = -1 Then ExitLoop ; Wenn @error = 1, dann Dateiende erreicht / Schleife verlassen
    FileWrite($hTarget, _StringEncrypt(0, $sFileBlock, "test", $iCryptLevel)) ; die Zeile entschlüsseln und speichern
    $iProgress += StringLen($sFileBlock) ; Wert für die Progressbar addieren
    GUICtrlSetData($Progress1, Int(100/$iFileSize*$iProgress)) ; und anzeigen
    WEnd
    FileClose($hTarget) ; Zieldatei schließen
    FileClose($hSource) ; Quelldatei schließen
    GUICtrlSetData($Progress1, 100) ; Progressbar auf 100% setzen
    EndIf
    GUICtrlSetState($Button2, $GUI_ENABLE) ; Button wieder aktivieren
    EndFunc ;==>_entschluesseln

    [/autoit]

    So funktioniert es mit jeder Art von Datei (Text, Bilder, Exe, egal was...).
    Allerdings ist _StringEncrypt nicht wirklich für große Dateien geeignet. Ab einer Dateigröße von 100-200 KB aufwärts wird das zum Geduldsspiel. Aber dafür gibt es ja auch schon fertige Programme, die wohl auch eine bessere/sicherere Verschlüsselung benutzen.

  • Wow - Vielen Dank euch beiden.

    Ich bevorzuge Oscars Lösung da sie meiner Variant näher kommt^^

    :thumbup: ^^

    Das mit der Dateigröße ist mir auch schon aufgefallen. Wollte 5 Mb Bmp machen -> Ewig!

    Gibt es da villeicht eine schnellere Methode ? Vllt könnte man ja abundzu mal einen String zwischen die Zeichen hauen und beim Entschlüsseln alle diese strings wieder wegnehemn also zb ADHWKR$§%450234jasf$5lkdf irgendwo zwischen.

    Ist nicht grade sicher; aber sollte doch schneller gehen oder ?

    Lg,

    Lenny

    Jaja, Moo does the Cow!

  • Ich habe gedacht, OHNE _stringencypt ;)


    Also sagen wir so


    $zeile = Random(0,$zeilen der datei)

    _FileWriteToLine($file,$zeile,"ADFL§EWRFLASKDFJEWF")

    ;)

    Später beim Entschlüsseln sucht er nach "ADFL§EWRFLASKDFJEWF" und entfernen.

    Lg,


    Lenny

    Jaja, Moo does the Cow!

    • Offizieller Beitrag

    Das kann man dann aber nicht mehr Verschlüsselung nennen. :rolleyes:

    Wie sieht es denn mit der Sicherheit aus?
    Du könntest ja eine eigene (einfache XOR) Verschlüsselungsmethode verwenden. So lange das Passwort gut gewählt und der Algorithmus "geheim" ist (Exedatei mit Obfuscator bearbeitet), reicht das vielleicht aus. Das dürfte auf jeden Fall schneller als _StringEncrypt sein.

    Wenn es sicherer sein soll, dann solltest Du vielleicht lieber zu einem externen Programm greifen.

  • Hi!

    Was ist XOR?


    Nein es geht mir eingentlich nicht hauptsächlich um die SIcherheit; mehr darum etwas zu schaffen ;)

    Also ein Algorythmus wie ein Keygen der Zb die erste Zahl generiert und die Zweite Zahl 1 + 65545 sein muss ;) ?

    LG,

    Lenny

    Jaja, Moo does the Cow!

    • Offizieller Beitrag

    Eine einfache Verschlüsselung basiert z.B. auf XOR bzw. bei AutoIt BitXOR().
    Nehmen wir mal einen Klartext: "Dieser Satz soll verschlüsselt werden."
    Als Passwort wählen wir: "Passwort"

    Nun legen wir das Passwort über den Klartext:

    Code
    Dieser Satz soll verschlüsselt werden.
    PasswortPasswortPasswortPasswortPasswo


    Jetzt musst Du jeden Buchstaben mit dem jeweiligen Buchstaben aus dem Passwort XOR'n.
    Also:

    [autoit]


    $out &= Chr(BitXOR(Asc("D"), Asc("P")))
    $out &= Chr(BitXOR(Asc("i"), Asc("a")))
    $out &= Chr(BitXOR(Asc("e"), Asc("s")))
    $out &= Chr(BitXOR(Asc("s"), Asc("s")))
    $out &= Chr(BitXOR(Asc("e"), Asc("w")))
    ...

    [/autoit]


    Natürlich nicht wirklich so, sondern in einer For...Next-Schleife. Das soll jetzt nur das Prinzip verdeutlichen.
    Heraus kommt ein String mit einer wirren Zeichenfolge, die man dann abspeichern kann. Entschlüsseln kann man das Ganze, indem man es umdreht und die wirren Zeichen mit dem Passwort XOR't.
    Bei einem falschen Passwort kommt dann nur eine ganz andere wirre Zeichenfolge heraus.

    Wie gesagt, diese Methode ist nicht sehr sicher, aber einfach umzusetzen.

    • Offizieller Beitrag

    Weil es mich mal interessiert hat, wie schnell AutoIt dabei ist, habe ich so eine Ver-/Entschlüsselungs-Funktion mal erstellt und in Dein Script eingebaut.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("Lenny's FileCrypter", 632, 345, 194, 132, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
    $Pic1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Lenny\Eigene Dateien\Lenny's.jpg", 0, 0, 632, 150, BitOR($SS_NOTIFY, $SS_SUNKEN, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS), $GUI_WS_EX_PARENTDRAG)
    $Button1 = GUICtrlCreateButton("Datei zum Verschlüsseln wählen", 40, 160, 243, 25, $WS_BORDER)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Button2 = GUICtrlCreateButton("Datei zum Entschlüsseln wählen", 344, 160, 243, 25, $WS_BORDER)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    Global $Input1 = GUICtrlCreateInput("Pfad", 40, 200, 545, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Label1 = GUICtrlCreateLabel("0% (0 von 0 KB)", 45, 284, 298, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    Global $Progress1 = GUICtrlCreateProgress(40, 304, 294, 17)
    $Button3 = GUICtrlCreateButton("Close me.", 352, 304, 227, 17, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _verschluesseln()
    Case $Button2
    _entschluesseln()
    Case $Button3
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _verschluesseln()
    Local $iProgress, $iCryptLevel, $sFilePath, $iFileSize, $hSource, $hTarget, $sFileBlock, $iPercent, $old
    GUICtrlSetState($Button1, $GUI_DISABLE) ; Button deaktivieren
    $sFilePath = FileOpenDialog("Datei zum Verschlüsseln auswählen", "", "Alle Dateien (*.*)", 1)
    If Not @error Then
    GUICtrlSetData($Input1, $sFilePath)
    $iFileSize = FileGetSize($sFilePath) ; Dateigröße auslesen
    $hSource = FileOpen($sFilePath, 16) ; Quelldatei im Binary-Mode öffnen
    $hTarget = FileOpen($sFilePath & ".lfc", 2+8+16) ; Zieldatei im Binary-Mode zum Schreiben öffnen
    While True
    $sFileBlock = FileRead($hSource, 64) ; einen 64 Byteblock aus der Quelldatei lesen
    If @error = -1 Then ExitLoop ; Wenn @error = -1, dann Dateiende erreicht / Schleife verlassen
    FileWrite($hTarget, _BlockEncrypt($sFileBlock, "cTDE808Ww7y53mn1o6AsS528aZE03i91")) ; den Block verschlüsseln und speichern
    $iProgress += 64 ; Wert für die Progressbar addieren
    $iPercent = Int(100/$iFileSize*$iProgress) ; Prozentwert errechnen
    If $iPercent <> $old Then
    GUICtrlSetData($Label1, $iPercent & "% (" & _StringAddThousandsSep($iProgress, ".") & " von " & _StringAddThousandsSep($iFileSize, ".") & " Bytes)")
    GUICtrlSetData($Progress1, $iPercent) ; und anzeigen
    $old = $iPercent
    EndIf
    WEnd
    FileClose($hTarget) ; Zieldatei schließen
    FileClose($hSource) ; Quelldatei schließen
    GUICtrlSetData($Label1, "100% (fertig!)") ; Label auf 100% setzen
    GUICtrlSetData($Progress1, 100) ; Progressbar auf 100% setzen
    EndIf
    GUICtrlSetState($Button1, $GUI_ENABLE) ; Button wieder aktivieren
    EndFunc ;==>_verschluesseln

    [/autoit] [autoit][/autoit] [autoit]

    Func _entschluesseln()
    Local $iProgress, $iCryptLevel, $sFilePath, $iFileSize, $hSource, $hTarget, $sFileBlock, $sPos, $sTarget, $iPercent, $old
    GUICtrlSetState($Button2, $GUI_DISABLE) ; Button deaktivieren
    $sFilePath = FileOpenDialog("Wählen sie die Datei zum DeCrypten aus", "", " (*.lfc)", 1)
    If Not @error Then
    GUICtrlSetData($Input1, $sFilePath)
    $iFileSize = FileGetSize($sFilePath) ; Dateigröße auslesen
    $hSource = FileOpen($sFilePath, 16) ; Quelldatei im Binary-Mode öffnen
    $sTarget = StringTrimRight($sFilePath, 4) ; Dateiendung (.lfc) entfernen
    If FileExists($sTarget) Then ; Wenn die Zieldatei bereits existiert, dann...
    $sPos = StringInStr($sTarget, ".", 0, -1) ; Position der Dateiendung
    $sTarget = StringLeft($sTarget, $sPos - 1) & "_Neu." & StringRight($sTarget, StringLen($sTarget)-$sPos) ; "_Neu" hinzufügen
    EndIf
    $hTarget = FileOpen($sTarget, 2+8+16) ; Zieldatei im Binary-Mode öffnen
    While True
    $sFileBlock = FileRead($hSource, 64) ; eine Zeile aus der Quelldatei lesen
    If @error = -1 Then ExitLoop ; Wenn @error = -1, dann Dateiende erreicht / Schleife verlassen
    FileWrite($hTarget, _BlockEncrypt($sFileBlock, "cTDE808Ww7y53mn1o6AsS528aZE03i91")) ; die Zeile entschlüsseln und speichern
    $iProgress += 64 ; Wert für die Progressbar addieren
    $iPercent = Int(100/$iFileSize*$iProgress) ; Prozentwert errechnen
    If $iPercent <> $old Then
    GUICtrlSetData($Label1, $iPercent & "% (" & _StringAddThousandsSep($iProgress, ".") & " von " & _StringAddThousandsSep($iFileSize, ".") & " Bytes)")
    GUICtrlSetData($Progress1, $iPercent) ; und anzeigen
    $old = $iPercent
    EndIf
    WEnd
    FileClose($hTarget) ; Zieldatei schließen
    FileClose($hSource) ; Quelldatei schließen
    GUICtrlSetData($Label1, "100% (fertig!)") ; Label auf 100% setzen
    GUICtrlSetData($Progress1, 100) ; Progressbar auf 100% setzen
    EndIf
    GUICtrlSetState($Button2, $GUI_ENABLE) ; Button wieder aktivieren
    EndFunc ;==>_entschluesseln

    [/autoit] [autoit][/autoit] [autoit]

    Func _BlockEncrypt($sCryptBlock, $sPass)
    Local $sOut = "", $iPassLen = StringLen($sPass), $j = 1, $sTemp
    For $i = 3 To StringLen($sCryptBlock) Step 2
    $sTemp = Asc(StringMid($sPass, Mod($j, $iPassLen), 1))
    $sOut &= Chr(BitXOR(Dec(StringMid($sCryptBlock, $i, 2)), $sTemp, Abs($iPassLen-$i)))
    $j += 1
    Next
    Return $sOut
    EndFunc

    [/autoit]

    Das ist schon deutlich schneller als _StringEncrypt, aber hinkt immer noch externen Programmen hinterher. Naja, die sind dann vermutlich auch in C oder einer ähnlich schnellen Sprache programmiert.
    Ein weiterer Vorteil meiner Funktion gegenüber _StringEncrypt ist der, dass die verschlüsselte Datei genauso groß wie die Quelldatei wird. Nachteil ist der einfache (kryptografisch schwache) Algorithmus.
    In der Verschlüsselungsfunktion habe ich aber das XOR etwas erweitert, damit bei mehreren Leerzeichen im zu verschlüsselnden Text nicht das Passwort im Klartext übernommen wird.

  • Hi.

    Vielen Dank!


    Verstehen tu ich davon nicht so viel aber das kommt vllt nohc ;)

    Habe ich das richtig verstanden das für jedes D ein P eingestzt wird und für jedes I ein A ?


    Lg,

    Lenny

    Jaja, Moo does the Cow!

    • Offizieller Beitrag

    Nee, so einfach ist die Verschlüsselung dann doch nicht. :D

    Das verwendete Passwort wird sozusagen "über" den zu verschlüsselnden Text gelegt. Und da der zu verschlüsselnde Text (normalerweise) länger als das Passwort ist, wird das Passwort dann immer wiederholt. Dabei bekommt nicht einfach jeder Buchstabe einen Buchstaben aus dem Passwort zugeordnet, sondern das ist abhängig von der Position im Text und von der Länge des Passwortes.

    Am besten erstellst Du Dir mal eine Beispiel-Textdatei und testest das mit dem Script.

  • ;D


    Und woher weiß das Script wenn ich die Datei 3 Tage später wieder entschlüsseln will was unter den Buchstaben ist :P ?


    Lg,

    Lenny

    P.S:

    Ich test das jetzt mal ^^^

    Wobei ich

    [autoit]


    Asc Mod Chr BitXOR Dec Abs

    [/autoit]

    Schon nicht kenne ;) Asc Kann ich mir denken Mod verstehen ich nicht Chr ? BitXOR verstehe ich das Prinzip nicht Dec Kann ich mir denken und Abs habe ich verstanden ;)

    Also auf den ersten Blick

    Aber ich werde mich da nohcmal reinfuchsen ;D

    Lg,

    Lenny

    Jaja, Moo does the Cow!

    Einmal editiert, zuletzt von Lenny (16. September 2008 um 14:40)