Идеята е AES да шифрова низ и да го изпрати на моя сървър и след това да го дешифрира там, за да получи истинския низ. Но не проработи и странно разбрах, че резултатът е различен дори когато AES-256 шифровате низ съответно на python и php.
Пример за Python:
from Crypto.Cipher import AES
import base64
original = "originalstring"
key = "12345678123456781234567812345678"
IV = "1234567812345678"
b64encodedOnly = base64.b64encode(original)
encryptCipher = AES.new(key, AES.MODE_CFB, IV)
encrypted = base64.b64encode(encryptCipher.encrypt(original))
decryptCipher = AES.new(key, AES.MODE_CFB, IV)
decrypted = decryptCipher.decrypt(base64.b64decode(encrypted))
print "original:", original
print "b64encoded only:", b64encodedOnly
print "AES-256 encrypted:", encrypted
print "AES-256 decrypted:", decrypted
Изход на Python:
original: originalstring
b64encoded only: b3JpZ2luYWxzdHJpbmc=
AES-256 encrypted: Rl4MMQojmBm0e6iuCl8=
AES-256 decrypted: originalstring
PHP пример:
<?php
$original = "originalstring";
$key = "12345678123456781234567812345678";
$IV = "1234567812345678";
$b64encodedOnly = base64_encode($original);
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $original, MCRYPT_MODE_CFB, $IV));
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($encrypted), MCRYPT_MODE_CFB, $IV);
echo "original: " . $original . "<br />";
echo "b64encoded only: " . $b64encodedOnly . "<br />";
echo "AES-256 encrypted: " . $encrypted . "<br />";
echo "AES-256 decrypted: " . $decrypted . "<br />";
?>
PHP изход:
original: originalstring
b64encoded only: b3JpZ2luYWxzdHJpbmc=
AES-256 encrypted: +w9F6zLD2avTt9fj8aM=
AES-256 decrypted: originalstring
Както можете да видите след AES-256 (CFB режим) криптиране и след това base64 кодиране, "originalstring"
се превръща в "Rl4MMQojmBm0e6iuCl8="
на python, докато "+w9F6zLD2avTt9fj8aM="
на PHP. Очевидно base64 функционира по същия начин, тъй като резултатът от кодирането на оригиналния низ е същият, така че единственият проблем изглежда е от страна на криптирането на AES, вярвам, че това е един и същ алгоритъм, внедрен в различна платформа, защо резултатите са различни?
РЕДАКТИРАНЕ:
Открих проблема: MCRYPT_RIJNDAEL_256 не е еквивалентен на AES_256.
Вижте това: https://stackoverflow.com/a/17249813/402197
MCRYPT_RIJNDAEL_256
иAES_256
не са едно и също. - person Shane   schedule 06.12.2013