|
|
|||||
Регистрация: Jan 2008
Адрес: Земля
Сообщений: 178
|
XOR-кодирование
Всем доброго времени суток
Хочу закодировать текст (String) XOR-методом и записать его в файл. Т.е. весь текст раскладываю на строки, кодирую построчно, собираю, добавляя в конец каждой строки "\r\n" последовательность. При декодировании опять разбиваю на строки, убираю "\r\n" и пробую декодировать с тем же ключом - НЕ ПОЛУЧАЕТСЯ!!! Создал такой вот класс: package src { public class XORcoder { // Constants: static const def_key:String='RQ9UEgyaXINTyzpn3SJ7FSzmwSlewTWI3'; // Initialization: public function XORcoder() { } // Public Methods: static public function encode(input_str:String,key:String=def_key):String { var output_str:String = new String(); output_str = xor(input_str,key); return output_str; } static public function decode(input_str:String,key:String=def_key):String { var output_str:String = new String(); output_str = xor(input_str,key); return output_str; } // Protected Methods: static private function xor(source:String,key:String):String { var result:String = new String(); for (var i:uint = 0; i<source.length; i++) { if (i > (key.length-1)) { key+=key; } result+=String.fromCharCode(source.charCodeAt(i)^key.charCodeAt(i)); } return result; } } } Кто подскажет? ----------------------------------------------------- Вот отдельная программка на этом классе. Если подольше потыкать, то можно обнаружить, что не всегда закодированный (encoded) текст возвращается в декодированный (decoded) при нажатии не кнопку "DECODE": Последний раз редактировалось RAlfDog; 16.09.2009 в 23:35. |
|
|||||
я бы тут ввёл 2-ой индекс j и сбрасывал бы его при достижении длины. А вообще пробую мелкие строки и используй trace всего что у тя в проге
|
|
|||||
Регистрация: Jan 2008
Адрес: Земля
Сообщений: 178
|
Проблема решена
Код рабочий, просто когда начинаешь трейсить полученную строку целиком или выводит её в textField, она почему-то обрезается, и декодирования к исходному виду не получается. |
|
|||||
Регистрация: Sep 2006
Адрес: Одесса
Сообщений: 11
|
из этого вырастут проблемы в виде символа конца строки. Строку в результате порвет.
|
|
|||||
Регистрация: Jan 2008
Адрес: Земля
Сообщений: 178
|
Ну и что, пусть будет символ конца строки, при декодировании он исчезнет, все символы встанут на свое место. (ПРОВЕРЕНО )
Здесь главное правильно передать закодированный текст на сервер или правильно его записать в файл. Когда пишешь в файл (если не использовать ByteArray), флеш сам выбирает кодировку, и вот здесь уже может не оказаться UTF-8. В итоге когда откроете файл, то декодировать его уже не получиться. Решил проблему таким образом: Перевел каждый символ полученной строки в число (charCodeAt(i)) и разделил их символом '.' Получил что-то типа такого: 119.82.71.47.19.26.84.75.64.65.38.48.23.69.40.84.73.65.73.84.4.15.93.91.68.110.87.112.73.80.66.94.84.82.108.103.80.73.4.81.86.89.10.10.122.83.75.120.71.67.53.3.67.86.19.19.22.23.49.9.28.84.31.24.31.1.57.63.92.89.82.75.109.112.67.81.73.81.86.85.65.64.1132.1100.1139.1109.1107.1104.1034.1033.99.209.1116.1100.1060.1116.1096.1058.1025.1136.1035.1107.1102.1071.1149.69.1110.1074.1100.1100.1101.1059.1033.1150.1109.75.1115.1030.1113.1025.1099.1114.1087.73.84.222.108.98.1130.1127.1070.75.74.72.2.16.78.112.118.127.110.83.123.104.2.63.57.80.126.110.100.104.98.84.116.123.67.80.26.5.84.69.86.118.87.124.126.107.126.110.65.84.125.109.125.115.60.97.64.79.61.51.78.112.118.127.110.64.86.49.69.83.65.21.83.23.48.4.28.17.116.123.80.68.119.84.30.15.68.8.71.116.126.107.94.85.87.84.65.64.64.116.59.75.106.98.1.52.73.87.119.67.85.110.124.82.60.56.19.108.121.85.73.111.69.69.72.64.126.110.4.56.102.91.80.104.87.125.93.83.67.84.95.104.70.123.125.115.28.90.86.89.61.51.115.119.76.85.85.82.81.111.59.3.62.107.94.85.117.84.101.126.73.124.121.105.62.4.97.97.73.119.86.116.126.107.67.105.108.66.107.71.122.72.60.97.74.89.1.8.78.112.118.127.110.110.124.83.60.56.30.80.66.85.73.111.88.121.115.81.126.110.5.56.102.70.85.119.86.72.121.81.126.110.70.104.70.123.125.115.28.90.86.89.61.51.115.119.76.82.105.105.71.111.59.17.19.34.18.22.32.69.38.84.75.124.121.73.5.4.93.102.110.118.106.79.83.108.121.85.107.111.97.123.65.72.60.97.87.101.58.25.78.112.119.127.110.78.71.83.0.63.57.81.126.110.100.104.98.69.116.123.94.85.5.4.97.97.84.75.109.101.126.107.66.105.108.72.125.123.65.116.59.91.106.98.16.52.73.75.75.120.73.82.71.83.60.56.3.108.121.68.73.111.89.121.115.92.66.85.5.56.102.91.105.76.71.72.121.80.126.110.75.84.125.123.125.115.1.102.109.72.61.51.114.119.76.95.85.82.71.111.59.2.62.107.83.105.78.84.101.126.84.64.66.85.57.63.92.102.110.102.106.79.66.108.121.71.70.38.45.56.20.89.127.75.84.101.58.9.78.112.118.127.110.67.123.104.0.63.57.81.126.110.116.104.98.84.116.123.66.105.62.0.97.97.84.75.109.101.126.107.66.105.108.85.65.64.64.116.59.75.106.98.1.52.73.87.119.67.85.110.124.82.60.56.19.108.121.85.73.111.69.69.72.64.126.110.4.56.102.75.105.76.86 Потом перед декодированием просто перевожу всё обатно в символы - |
|
|||||
Регистрация: Sep 2006
Адрес: Одесса
Сообщений: 11
|
точно не вспомню где мне боком такая сторка вылезла, но она была ущербной. использовал какраз bytearray и его метод writeMultyByte с нужной кодировкой.
вот так примерно получилось: public static function crypt(stringData:String, passwordData:String = '5abaa65', charSet:String = 'utf-8'):ByteArray { var string :ByteArray = new ByteArray(); var password:ByteArray = new ByteArray(); string.writeMultiByte (stringData, charSet); password.writeMultiByte (passwordData, charSet); var stringInd:uint = 0; var passwordInd:uint = 0; string.position = 0; password.position = 0; var stringLen:uint = string.length; var passwordLen:uint = password.length; while (stringInd<stringLen){ passwordInd = 0; while (passwordInd < passwordLen) { string[stringInd] ^= password[passwordInd]; passwordInd++; } stringInd++; } return string; } Последний раз редактировалось cursed_man; 27.04.2010 в 17:15. |
Часовой пояс GMT +4, время: 18:35. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|