Ага!
Существует различие во мнениях, что означает «256».
AES имеет фиксированный размер блока 128 битов, поэтому «AES 256» означает 128-битные блоки,256-битный ключ , 14 раундов.
Однако Rijndael допускает изменение как размера ключа, так и размера блока.MCRYPT_RIJNDAEL_256
относится к Rijndael с размером блока , установленным в 256 (и я не знаю, сколько раундов).Так что это действительно занимает 32 байта IV.Ваш PHP-скрипт не с использованием AES 256.
Это подтверждается в https://bugs.php.net/bug.php?id=47125 - репортер считает это ошибкой в PHP mcrypt, PHP считает это ошибкой в libmcrypt, но это не ошибка, так как libmcrypt документирует, что означает MCRYPT_RIJNDAEL_256
(по крайней мере, справочная страница linux для mcrypt делает мой Google-fu, так и не удалось найти какую-либо фактическую документацию для libmcrypt).Это случается не так, как AES 256.
Итак, вы шифруете и дешифруете с помощью шифров, которые, хотя и связаны, могут быть совершенно другими.
Плохие новостив том, что в PyCrypto нет Crypto.Cipher.RIJNDAEL
.Если вы можете передать 256-битный ключ в MCRYPT_RIJNDAEL_128 в сценарии PHP, то это будет AES 256 (спасибо Paŭlo).