расшифровать зашифрованный текст as3crypto в PHP

Я попытался зашифровать текст в as3crypto через демонстрационное приложение.

теперь я пытаюсь расшифровать зашифрованный текст через php, но кажется, что текст не дешифрован должным образом. Кто-нибудь знает, как правильно расшифровать его через PHP? или я делаю это неправильно? пожалуйста, просветите меня …

вот сценарий:

  1. зашифруйте это в http://crypto.hurlant.com/demo/ :

    шифрование: AES

    режим: CBC

    прокладка: нет

    Ключ: 11918f8bcd112e92744125008722050c

    текст: Lorem ipsum dolor sit amet, consectetur adipiscing elit. В ut massa nec purus laoreet posuere quis vitae tortor.

    инициализировать вектор: оставьте его пустым

  2. нажмите зашифровать. выберите base64 и скопируйте шифрованный текст.

  3. создайте скрипт php, который имеет эти коды и запускает его:

    $ cipher = MCRYPT_RIJNDAEL_128;

    $ mode = MCRYPT_MODE_CBC;

    $ key = "11918f8bcd112e92744125008722050c";

    $ cipher = "PLACE CIPHER TEXT HERE …";

    $ data = base64_decode ($ cipher);

    echo mcrypt_decrypt ($ cipher, $ key, $ data, $ mode);

проблема, вероятно, лежит в вашем ключе. Пока вы можете передать шестнадцатеричную строку в as3crypto, и она будет знать, что с ней делать, mcrypt_decrypt будет интерпретировать каждый символ, поскольку это основное значение ASCII (например, a = 97) вместо его шестнадцатеричного значения (a = 10). Используйте метод hex2bin для преобразования шестнадцатеричной строки в строку байтов, и ваше дешифрование должно работать нормально.

Кроме того, проблема может основываться на разных идеях стандартного IV (вектор инициализации) между as3crypto и php. Поскольку вы используете режим CBC, вы должны указать IV, как хорошую практику безопасности. также помните о потенциальных ловушках, подобных тем, у которых есть ваш ключ, указав шестнадцатеричную строку в as3 и нужно преобразовать ее в php.

Это будет работать:

PHP-код:

 //notice that $key and $iv length must be 16 chars long! ex: 1234567890123456 function decrypt($data,$key,$iv) { $decr= mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($data), MCRYPT_MODE_CBC, $iv); return $decr; } 

И вот код AS3

 //notice that $key and $iv length must be 16 chars long! ex: 1234567890123456 private function encrypt(input:String,decrKey:String,decrIV:String):String { var inputBA:ByteArray=Hex.toArray(Hex.fromString(input)); var key:ByteArray = Hex.toArray(Hex.fromString(decrKey)); var pad:IPad = new NullPad(); var aes:ICipher = Crypto.getCipher("aes-cbc", key, pad); var ivmode:IVMode = aes as IVMode; ivmode.IV = Hex.toArray(Hex.fromString(decrIV)); aes.encrypt(inputBA); return Base64.encodeByteArray( inputBA); }