обмениваться 256 зашифрованными данными между php и flex - PullRequest
1 голос
/ 07 июля 2011

Мне нужно 2 набора функций шифрования / дешифрования для запуска под PHP и AS3.

Я нашел AS3Crypto (для Flex) и mcrypt_encrypt (для PHP) и эту статью, которая показывает, как использовать их для шифрования DES: http://www.zedia.net/2009/as3crypto-and-php-what-a-fun-ride/

Затем я попытался заменить шифрование DES на AES-256, потому что DES кажется слишком уязвимым для атак методом перебора.Результаты шифрования AES во Flex и PHP различны.Кто-нибудь знает (и проверял) какие-либо эквивалентные функции для шифрования aes в as3 и php?

Если бы я не был достаточно ясен, вот еще одно сообщение пользователя, имеющего ту же проблему: http://forum.openlaszlo.org/showthread.php?t=13709

Спасибо!

1 Ответ

0 голосов
/ 07 июля 2011

Я сделал то же самое с разными бэк-эндами, и может быть головной болью заставить их соответствовать.

Я с высокой степенью уверенности скажу вам по опыту, что, скорее всего, проблема, с которой вы сталкиваетесь, заключается в том, что заполнение не совпадает между этими двумя значениями или кодировка идет вперед и назад (Hex).

Вот некоторый рабочий код Coldfusion из реализации, которую я сделал пару лет назад, быстрее всего я смог выкопать ...

<cfsetting enablecfoutputonly="yes">
<cfparam name="form.k" default="1bbee91984f8b5bc032b6f67a665704e"/>
<cfscript>
textToEncrypt = 'printButton=No&saveButton=No';
encKey = ToBase64(BinaryDecode(form.k,"Hex"));
encryptedText = encrypt(textToEncrypt, encKey, 'AES', 'Hex');
</cfscript>
<cfoutput>settings=#encryptedText#</cfoutput>

(примечание: неужели холодная реакция не удивительна? Хе-хе: P)

Сторона дешифрования в flex:

private function settingsEncResponse( e : ResultEvent ) : void {
            // decrypt settings string
            var o : Object = e.result;
            var k:String = pKey; // key to decrypt with
            var kdata:ByteArray;
            kdata = Hex.toArray(k);
            var txt:String = o.settings; // text to decrypt
            var data:ByteArray;
            data = Hex.toArray(txt);
            var pad:IPad = new PKCS5;
            var mode:ICipher = Crypto.getCipher("aes-ecb", kdata, pad);
            pad.setBlockSize(mode.getBlockSize());
            mode.decrypt(data);
            currentInput = data;
            var decryptedSettings : String = Hex.toString(Hex.fromArray(currentInput)); 
...