|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Как сделать правильный перевод String в ByteArray
Здравствуйте! Столкнулся с одной проблемкой.
Легенда: Есть криптографическая библиотека http://code.google.com/p/as3crypto/ меня интересует конкретно "aes-128-ecb" шифрование. Вот кусочек кода как оно работает: 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); 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); Похоже что здесь дело в том, как мы пишем строку в ByteArray. Если попробовать такой способ: Таким образом становится понятно, что крашится скрипт потому, что не удаётся воссоздать оригинальный ByteArray. Вопросы: Возможно существуют какие-то способы передачи ByteArray от php сервера? И нужно пользоваться именно ими? Или возможно надо как то по другому воссоздавать ByteArray, пользуясь другими методами? Подскажите пожалуйста, как действовать в этой ситуации. Уже не первый день думаю над этим.
__________________
Играй. Это жизнь. Всё повторяется. Играй. Последний раз редактировалось AzagThoth; 13.09.2012 в 15:17. |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Цитата:
Дальше вопрос по вашему коду: var encoded:String = Base64.encode(strBytes); var decoded:ByteArray = Base64.decode(encoded); trace(decoded.toString()) Цитата:
Перестаньте подбирать различные способы перекладывания из строк в строки и разберитесь, что же вам на самом деле нужно. Прокоментируйте в коде для каждой переменной, что именно в ней лежит. Т.е. что получается в результате ваших преобразований. Тогда вы и поймете, какие из манипуляций со строками лишние. Если их убрать, все будет работать нормально. |
|
|||||
Я просто опечатался когда первый пост составлял. Сейчас посмотрите. Отрывок про который вы говорите:
var encoded:String = Base64.encode(strBytes); trace(encoded);//В отпут выходит вот это: "1X0ceapxfyHFztoZ34dmzp7up0XnRaOt/IvCyAsuGheyq0W21NuTyoY7WaZCs4xE" trace(strBytes.length);//В оутпут выходит число 48 в коде куча трейсов (так как для себя пишу и отлаживаю), при публикации не тот трейс затёр. И не заметил Добавлено через 6 минут Спасибо огромное за Ваш пост! Всё решил так: var keyStr:String = "thisisaverysecre"; var strBytes:ByteArray = Base64.decode("1X0ceapxfyHFztoZ34dmzp7up0XnRaOt/IvCyAsuGhcGaXGSndGJnFbNxIxTrFym"); var keyBytes:ByteArray = new ByteArray(); keyBytes.writeUTFBytes(keyStr); var mode:ICipher = Crypto.getCipher("aes-128-ecb", keyBytes); mode.decrypt(strBytes); trace(strBytes);
__________________
Играй. Это жизнь. Всё повторяется. Играй. |
|
|||||
Регистрация: Feb 2009
Сообщений: 141
|
var keyBytes:ByteArray = Hex.toArray(keyStr);
|
|
|||||
[+4 06.05.14]
|
private function encryptString(msg:String):String { var key:ByteArray = Hex.toArray(Hex.fromString(KEY)); var plainText:ByteArray = Hex.toArray(Hex.fromString(msg)); var cipher:ICipher = Crypto.getCipher("des-ecb", key); cipher.encrypt(plainText); return Base64.encode( Hex.fromArray(plainText) ); } private function decryptString(msg:String):String { var key:ByteArray = Hex.toArray(Hex.fromString(KEY)); var plainText:ByteArray = Hex.toArray(msg); var cipher:ICipher = Crypto.getCipher("des-ecb", key); cipher.decrypt(plainText); return Hex.toString(Hex.fromArray(plainText)); } const deCryptedString:String = Base64.decode(cryptedData); try { const openString:String = decryptString(deCryptedString); } catch (e:Error) { throw new IllegalOperationError('HACK FAILED' , -999); } trace('3:-====GET DATA====-'); trace('Crypted data (base64) : ' + cryptedData); trace('DES data : ' + deCryptedString); trace('Decrypted data : ' + openString); trace('3:-====END DATA====-');
__________________
Марк Tween |
|
|||||
У меня часть ключа шифрования сервер генерирует. А часть в флешку запилена. То есть ключи и шифровки у всех пользователей разные. Только на практике, с высоким навыком - всё равно можно через какие-нибудь декомпиляторы достучаться до кода флешки и всё узнать оттуда Обидно.
__________________
Играй. Это жизнь. Всё повторяется. Играй. |
|
|||||
[+4 06.05.14]
|
AzagThoth - нет. Декомпил флешки мало что даст в случае, если эту флешку будут часто перешивать, особенно если это мини-хак флеша. Хочешь заработать - перешей. А так вообще много решений на самом деле. Да и кстати обфускаторы строк есть хорошие, ни одним декомпилом не сломаешь , но это тока для строк. - п.с. платно 100%
__________________
Марк Tween |
|
|||||
Цитата:
Обфускаторами да, пользовался. Но теоретически каким-нибудь низкоуровневым дизасемблятором типа "ollydbg", при наличии навыка - сломать конечно получится. Добавлено через 1 минуту Возможно читали эти статьи http://www.wasm.ru/series.php?sid=17 Я только половину прочитал. Но очевидно, что всё что однажды оказывается на стороне клиента - 100% ломается.
__________________
Играй. Это жизнь. Всё повторяется. Играй. |
|
|||||
[+4 06.05.14]
|
Цитата:
__________________
Марк Tween |
Часовой пояс GMT +4, время: 02:31. |
|
« Предыдущая тема | Следующая тема » |
Теги |
AS3 , bytearray |
|
|