Bild VER und ENTschlüsseln

  • Ich würde gerne ein Bild in mein Script einlesen, und dann verschlüsseln.
    Das simple einlesen mit Fileopen(DATEI,16) und dann mit Filewrite hat wunderbar funktioniert.
    Wenn ich jedoch nach dem einlesen den string mit StringtoBinary "verschlüssle",
    dann ist die gespeicherte Datei nicht mehr entschlüsselbar...
    Liegt es an StringtoBinary?
    BSP. das NICHT funktioniert:
    "Verschlüsseln":

    [autoit]

    $k=FileOpen("Bild1.jpg",16)
    $x=FileRead($k)
    $x=StringToBinary($x,4)
    FileWrite(@ScriptDir&"\TEST.jpg",$x)

    [/autoit]


    "Entschlüsseln"

    [autoit]

    $o=FileOpen("Test.jpg",16)
    FileWrite("B1.jpg",$o)
    FileWrite("B2.jpg",BinaryToString($o,4))

    [/autoit]


    Ich vermute, dass es mit "echten" Verschlüsselungsmethoden auch nicht funktioniert.
    (korrigiert mich bitte falls ich falsch liege)
    Bin leider ratlos wie dieses Problems zu lösen ist :(

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

    Einmal editiert, zuletzt von XovoxKingdom (4. März 2010 um 16:56)

  • Ich vermute, dass es mit "echten" Verschlüsselungsmethoden auch nicht funktioniert.
    (korrigiert mich bitte falls ich falsch liege)

    Das geht sehr wohl, hier ein Beispielscript:

    Spoiler anzeigen
    [autoit]


    #include <Crypt.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #include <GuiEdit.au3>

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

    Global $Key
    Global $algo

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

    Global $GUI = GUICreate("Entschlüsseln/Verschlüsseln mit AES 256 Bit", 420, 240)
    Global $Button1 = GUICtrlCreateButton("...", 380, 10, 30, 20)
    Global $Button2 = GUICtrlCreateButton("...", 380, 40, 30, 20)
    Global $Button3 = GUICtrlCreateButton("Verschlüsseln", 10, 180, 400, 25)
    Global $Button4 = GUICtrlCreateButton("Entschlüsseln", 10, 205, 400, 25)
    Global $Input1 = GUICtrlCreateInput("", 90, 10, 290, 20)
    Global $Input2 = GUICtrlCreateInput("", 90, 40, 290, 20)
    Global $Input3 = GUICtrlCreateInput("", 90, 70, 290, 20)
    Global $Label1 = GUICtrlCreateLabel("Quelldatei:", 10, 15)
    Global $Label2 = GUICtrlCreateLabel("Zieldatei:", 10, 45)
    Global $Label3 = GUICtrlCreateLabel("Passwort:", 10, 75)
    Global $Check1 = GUICtrlCreateCheckbox("Quelldatei nach Ent-/Verschlüssellung löschen", 10, 130)
    Global $Check2 = GUICtrlCreateCheckbox("Passwort nicht anzeigen", 10, 150)
    Global $Label4 = GUICtrlCreateLabel("Algorithmus:", 10, 103)
    Global $Combo1 = GUICtrlCreateCombo("AES 256 Bit", 90, 100, 130)
    GUICtrlSetData(-1, "Triple DES|AES 128 Bit|AES 192 Bit|DES 56 Bit|RC2|RC4")
    GUISetState()

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case $Button1
    $fo1 = FileOpenDialog("Bitte wählen Sie eine Datei aus!", "", "Alle Dateien (*.*)")
    GUICtrlSetData($Input1, $fo1)
    Case $Button2
    $fs1 = FileSaveDialog("Bitte geben Sie Namen und Pfad der Zieldatei ein!", "", "Alle Dateien (*.*)")
    GUICtrlSetData($Input2, $fs1)
    Case $Check2
    If GUICtrlRead($Check2) = $GUI_UNCHECKED Then
    _GUICtrlEdit_SetPasswordChar($Input3)
    GUICtrlSetState($Input3, $GUI_FOCUS)
    Else
    _GUICtrlEdit_SetPasswordChar($Input3, "*")
    GUICtrlSetState($Input3, $GUI_FOCUS)
    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button3 ;Verschlüsseln
    Switch GUICtrlRead($Combo1)
    Case "Triple DES"
    $algo = $CALG_3DES
    Case "DES 56 Bit"
    $algo = $CALG_DES
    Case "RC2"
    $algo = $CALG_RC2
    Case "RC4"
    $algo = $CALG_RC4
    Case "AES 128 Bit"
    $algo = $CALG_AES_128
    Case "AES 192 Bit"
    $algo = $CALG_AES_192
    Case "AES 256 Bit"
    $algo = $CALG_AES_256
    EndSwitch
    If GUICtrlRead($Input1) = "" Then
    MsgBox(262160, "Es ist ein Fehler aufgetreten", "Es sind Eingaben in jedem der drei Eingabefelder nötig, um Dateien zu ver-/entschlüsseln!")
    ContinueCase
    EndIf
    If GUICtrlRead($Input2) = "" Then
    MsgBox(262160, "Es ist ein Fehler aufgetreten", "Es sind Eingaben in jedem der drei Eingabefelder nötig, um Dateien zu ver-/entschlüsseln!")
    ContinueCase
    EndIf
    If GUICtrlRead($Input3) = "" Then
    MsgBox(262160, "Es ist ein Fehler aufgetreten", "Es sind Eingaben in jedem der drei Eingabefelder nötig, um Dateien zu ver-/entschlüsseln!")
    ContinueCase
    EndIf
    $Quelle = GUICtrlRead($Input1)
    $Ziel = GUICtrlRead($Input2)
    $Key = GUICtrlRead($Input3)
    _Crypt_EncryptFile($Quelle, $Ziel, $Key, $algo)
    If @error <> 0 Then
    MsgBox(262160, "Es ist ein Fehler aufgetreten", "Die Datei konnte nicht verschlüsselt werden")
    Exit
    Else
    MsgBox(262208, "Verschlüssellung erfolgreich!", "Die Datei konnte verschlüsselt werden!")
    If GUICtrlRead($Check1) = $GUI_CHECKED Then
    FileDelete($Quelle)
    EndIf
    Exit
    EndIf
    Case $Button4 ;Entschlüsseln
    Switch GUICtrlRead($Combo1)
    Case "Triple DES"
    $algo = $CALG_3DES
    Case "DES 56 Bit"
    $algo = $CALG_DES
    Case "RC2"
    $algo = $CALG_RC2
    Case "RC4"
    $algo = $CALG_RC4
    Case "AES 128 Bit"
    $algo = $CALG_AES_128
    Case "AES 192 Bit"
    $algo = $CALG_AES_192
    Case "AES 256 Bit"
    $algo = $CALG_AES_256
    EndSwitch
    If GUICtrlRead($Input1) = "" Then
    MsgBox(262160, "Es ist ein Fehler aufgetreten", "Es sind Eingaben in jedem der drei Eingabefelder nötig, um Dateien zu ver-/entschlüsseln!")
    ContinueCase
    EndIf
    If GUICtrlRead($Input2) = "" Then
    MsgBox(262160, "Es ist ein Fehler aufgetreten", "Es sind Eingaben in jedem der drei Eingabefelder nötig, um Dateien zu ver-/entschlüsseln!")
    ContinueCase
    EndIf
    If GUICtrlRead($Input3) = "" Then
    MsgBox(262160, "Es ist ein Fehler aufgetreten", "Es sind Eingaben in jedem der drei Eingabefelder nötig, um Dateien zu ver-/entschlüsseln!")
    ContinueCase
    EndIf
    $Quelle = GUICtrlRead($Input1)
    $Ziel = GUICtrlRead($Input2)
    $Key = GUICtrlRead($Input3)
    _Crypt_DecryptFile($Quelle, $Ziel, $Key, $algo)
    If @error <> 0 Then
    MsgBox(262160, "Es ist ein Fehler aufgetreten", "Die Datei konnte nicht entschlüsselt werden")
    Exit
    Else
    MsgBox(262208, "Entschlüssellung erfolgreich!", "Die Datei konnte entschlüsselt werden!")
    If GUICtrlRead($Check1) = $GUI_CHECKED Then
    FileDelete($Quelle)
    EndIf
    Exit
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Mit dem Script kannst Du z.B. ein Bild verschlüsseln und als TXT speichern und es auch wieder entschlüsseln.