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
_Crypt_Startup()
[/autoit] [autoit][/autoit] [autoit]$data = Binary('0xA7B3D72F3291A4744E97676E667A04B6')
$data2 = Binary('0xAEF37004C25E90D2D5D69C9390E0D9D8')
$key2 = "5e78c9a1ca2e6a7d58d3184b6933f0ff"
$iv = "cf83e1357eefb8bd"
$key = _CryptImportKey($CALG_AES_256, $key2, 32)
[/autoit] [autoit][/autoit] [autoit]Local $KP_IV = 1
_CryptSetKeyParam($key, $KP_IV, $iv, 0, "str")
$crypt = _Crypt_EncryptData("test", $key, $CALG_USERKEY)
$crypt = Hex($crypt)
ConsoleWrite("Encrypted: " & $crypt & @LF)
[/autoit] [autoit][/autoit] [autoit]$decrypt = _Crypt_DecryptData($data2, $key, $CALG_USERKEY)
ConsoleWrite("Decrypted: " & BinaryToString($decrypt) & @LF)
_Crypt_Shutdown()
[/autoit]PHP
Spoiler anzeigen
$endkey = "5e78c9a1ca2e6a7d58d3184b6933f0ff";
$iv = "cf83e1357eefb8bd"
$enc = mc_encrypt( "test", $endkey);
$dec = mc_decrypt( $enc, $endkey);
echo $enc."<BR>".$dec."<BR>".$iv."<BR>".$endkey;
function mc_encrypt($encrypt, $mc_key)
{
$iv = getiv();
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $mc_key, $encrypt, MCRYPT_MODE_CBC, $iv);
return strtoupper(bin2hex($crypttext));
}
function mc_decrypt($decrypt, $mc_key) {
$decoded = hex2bin($decrypt);
$iv = getiv();
$decoded = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $mc_key, $decoded, MCRYPT_MODE_CBC, $iv);
return $decoded;
}
Alles 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
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