Показать сообщение отдельно
Старый 13.09.2012, 14:22
AzagThoth вне форума Посмотреть профиль Отправить личное сообщение для AzagThoth Найти все сообщения от AzagThoth
  № 1  
Ответить с цитированием
AzagThoth
 
Аватар для AzagThoth

блогер
Регистрация: Sep 2009
Сообщений: 309
Записей в блоге: 4
Отправить сообщение для AzagThoth с помощью ICQ
Question Как сделать правильный перевод String в ByteArray

Здравствуйте! Столкнулся с одной проблемкой.
Легенда:
Есть криптографическая библиотека http://code.google.com/p/as3crypto/ меня интересует конкретно "aes-128-ecb" шифрование.
Вот кусочек кода как оно работает:
Код AS3:
var testStr:String = "Meet me at 11 o clock behind the monument.";
var keyStr:String = "thisisaverysecre";//somerandomstring
var strBytes:ByteArray = new ByteArray();
strBytes.writeUTFBytes(testStr);
var keyBytes:ByteArray = new ByteArray();
keyBytes.writeUTFBytes(keyStr);
var mode:ICipher = Crypto.getCipher("aes-128-ecb", keyBytes);
mode.encrypt(strBytes);
var encoded:String = Base64.encode(strBytes);
trace(encoded);//В отпут выходит вот это: "1X0ceapxfyHFztoZ34dmzp7up0XnRaOt/IvCyAsuGheyq0W21NuTyoY7WaZCs4xE"
trace(strBytes.length);//В оутпут выходит число 48
mode.decrypt(strBytes);
trace(strBytes);
Теперь представим гипотетическую ситуацию, когда с сервера приходит строка кодированная в Base64. А мы хотим её обработать. Для чистоты эксперимента возьмём эту строку "1X0ceapxfyHFztoZ34dmzp7up0XnRaOt/IvCyAsuGheyq0W21NuTyoY7WaZCs4xE".
Код AS3:
var decoded:ByteArray = Base64.decode("1X0ceapxfyHFztoZ34dmzp7up0XnRaOt/IvCyAsuGhcGaXGSndGJnFbNxIxTrFym");
var testStr:String = decoded.toString();
var keyStr:String = "thisisaverysecre";
var strBytes:ByteArray = new ByteArray();
strBytes.writeUTFBytes(testStr);
var keyBytes:ByteArray = new ByteArray();
keyBytes.writeUTFBytes(keyStr);
var mode:ICipher = Crypto.getCipher("aes-128-ecb", keyBytes);
trace(strBytes.length);//В оутпут выводит: 68 
mode.decrypt(strBytes);//Здесь код крашится
trace(strBytes);
Это грустно, так как 68 и 48 это разные числа
Похоже что здесь дело в том, как мы пишем строку в ByteArray.
Если попробовать такой способ:
Код AS3:
strBytes.writeUTF(testStr);
trace(strBytes.length);//В оутпут выводит: 70
Таким образом становится понятно, что крашится скрипт потому, что не удаётся воссоздать оригинальный ByteArray.
Вопросы:
Возможно существуют какие-то способы передачи ByteArray от php сервера? И нужно пользоваться именно ими? Или возможно надо как то по другому воссоздавать ByteArray, пользуясь другими методами? Подскажите пожалуйста, как действовать в этой ситуации. Уже не первый день думаю над этим.
__________________
Играй. Это жизнь.
Всё повторяется. Играй.


Последний раз редактировалось AzagThoth; 13.09.2012 в 15:17.