AES256 - Merkwuerdiges Verhalten

  • Abend zusammen.

    Ich verzweifle seit nun zwei Tagen an einem merkwuerdigen Verhalten von AES-Verschluesslungen in PHP & AutoIt.

    Ich teste simultan folgende Skripte:

    Autoit

    Spoiler anzeigen
    [autoit]

    _Crypt_Startup()

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

    $data = Binary('0xA7B3D72F3291A4744E97676E667A04B6')
    $data2 = Binary('0xAEF37004C25E90D2D5D69C9390E0D9D8')

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

    $key2 = "5e78c9a1ca2e6a7d58d3184b6933f0ff"
    $iv = "cf83e1357eefb8bd"

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

    $key = _CryptImportKey($CALG_AES_256, $key2, 32)

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

    Local $KP_IV = 1
    _CryptSetKeyParam($key, $KP_IV, $iv, 0, "str")

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

    $crypt = _Crypt_EncryptData("test", $key, $CALG_USERKEY)
    $crypt = Hex($crypt)

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

    ConsoleWrite("Encrypted: " & $crypt & @LF)

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

    $decrypt = _Crypt_DecryptData($data2, $key, $CALG_USERKEY)
    ConsoleWrite("Decrypted: " & BinaryToString($decrypt) & @LF)

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

    _Crypt_Shutdown()

    [/autoit]

    PHP

    Spoiler anzeigen


    Allgemein
    Wenn ich per AutoIt verschluessle und per PHP entschluesse, bekomme ich exakt (!) den verschluesselten Text zurueck.
    Verschluessle ich allerdings per PHP und versuche per AutoIt zu entschluesseln, ist das Output leer (@error = 2).

    In beiden Beispielen verschluessle ich mit dem selben IV und dem selben Key denselben Text, und bekomme unterschiedliche Ergebnisse :huh:
    Ergebnis der PHP-Verschluesslung: A7B3D72F3291A4744E97676E667A04B6
    Ergebnis der AutoIt-Verschluesslung: AEF37004C25E90D2D5D69C9390E0D9D8

    Aber es wird noch merkwuerdiger - wenn ich per PHP beide Datensaetze entschluessle, ergeben beide das richtige Ergebnis!
    AutoIt hingegen nimmt nur seinen eigenen String.


    Also, wenn mir jemand das Problem und am besten auch seine Loesung erklaeren koennte, waere ich sehr dankbar :)
    Sonst muss ich wohl das Galileo Mystery Team rufen ;)

    P.S.: Ja, ich habe bereits in verschiedenen Google-Eintraegen von verschiedenen Pads der Texte in PHP & AutoIt gehoert.
    Leider haben entsprechende Tests nichts am Ergebnis veraendert.
    AutoIt's Decryptfunktion ist anscheinend extrem streng :S

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

    Einmal editiert, zuletzt von Dankeschön (13. August 2013 um 01:15)

  • Der Fehler lag doch lediglich am Pad-ding.

    PHP kommt mit beiden Pads klar,
    AutoIt nur mit sienem eigenen.

    Nutzt man folgende Funktion in PHP bevor man den Text verschluesselt,
    akzeptiert AutoIt den Text auch.

    Code
    function pkcs5_pad ($text, $blocksize=16)
    { // by duerra (http://us3.php.net/manual/en/ref.mcrypt.php#69782)
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }
    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön