Расшифруйте AES-CBC в php из as3crypto
Я нашел много дискуссий по этому вопросу, но ни одна из них, похоже, не работает для меня, поэтому любая помощь приветствуется. Я кодирую некоторый текст во флэш-памяти, используя библиотеку as3crypto, а затем отправляю этот зашифрованный текст в скрипт php, где мне нужно его декодировать. Шифрование и дешифрование прекрасно работает внутри флеш-памяти, но я не могу его расшифровать в php.
Вот код, который я имею во Flash
private static const KEY:String = "AxiKzCRH5arSABesX9bH2lTSxYmAGEEz";
private static function encrypt(input:String, key:String, algorithm:String = "aes-cbc", padding:String = "None"):String {
var kdata:ByteArray = Base64.decodeToByteArray(key);
var data:ByteArray = Hex.toArray(Hex.fromString(input));
var pad:IPad = padding == "pkcs5" ? new PKCS5 : new NullPad;
var mode:ICipher = Crypto.getCipher("simple-" + algorithm, kdata, pad);
pad.setBlockSize(mode.getBlockSize());
mode.encrypt(data);
return Hex.fromArray(data);
}
var text-to-send-to-php:String = encrypt('test text', KEY);
И вот код, который я до сих пор в php, который не работает
<?php
$key = 'AxiKzCRH5arSABesX9bH2lTSxYmAGEEz';
$encrypted_text = the-text-i-get-from-flash;
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_URANDOM);
mcrypt_generic_init($td, $key, $iv);
$s = mdecrypt_generic($td, $encrypted_text);
echo 'decrypted = ' . $s;
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
?>
1 ответ
Решение
Поэтому я решил, что это проблема с кодированием / декодированием, но это также проблема с IV. Вот окончательный рабочий код в php
<?php
$key = base64_decode('AxiKzCRH5arSABesX9bH2lTSxYmAGEEz');
$encrypted_text = the-text-i-get-from-flash;
$encrypted_text = hex2bin($encrypted_text);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$blocksize = mcrypt_enc_get_block_size($td);
$iv = substr($encrypted_text, 0, $blocksize);
$encrypted_text = substr($encrypted_text, $blocksize);
mcrypt_generic_init($td, $key, $iv);
$username = mdecrypt_generic($td, $encrypted_text);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
?>