| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > RC4-реализация на C++ Builder |
| Автор: Atanvarno 8.6.2009, 16:43 | ||
Реализация алгоритма взята отсюда: http://en.wikipedia.org/wiki/Rc4
В результате программа работает очень странно, шифрует только до какого-то символа, потом перестаёт шифровать. В общем, выходит какая -то ахинея. Вот исходник: http://dump.ru/file/2865530 У меня возникает стойкое ощущение, что я не вижу какой-то элементарной ошибки. Буду благодарен, если кто-нибудь подскажет. |
| Автор: xvr 8.6.2009, 17:00 |
| Во первых (если мне не изменяет мой склероз), все числа 255 в RC4 надо заменить на 256 Во вторых - вот эти строки if (c[y]==NULL) break; у вас прекращают шифрование, если в потоке получится нулевой символ (а он получится, т.к. после шифрования поток уже не текстовый а бинарный, и в нем имеет право появится ЛЮБОЙ символ) |
| Автор: Atanvarno 8.6.2009, 17:19 |
| Да, про NULL я понял, спасибо. Насчёт 256 - дело явно не в этом, программа вообще перестала работать. |
| Автор: xvr 8.6.2009, 17:30 |
| 255/256 будет влиять на криптографические качества генерируемой последовательности (RC4). Работать оно будет в любом случае и на глаз отличия не заметишь. Отличия будут, если применить криптоанализ к результату, скорее всего устойчивость к взлому снизится (да и RC4 это уже называть нельзя будет |
| Автор: Atanvarno 8.6.2009, 17:53 |
| Так дело в том, что она не работает ни в первом, ни во втором варианте. |
| Автор: xvr 8.6.2009, 19:04 | ||
| В смысле 'не работает'? Перестает шифровать в середине блока? Это из за if (c[y]==NULL) break; А так же из за y < strlen((unsigned unsigned char*)c) в условии for И вообще - пользоваться строковыми функциями для обработки бинарных данных - явно не самая удачная идея Если вам нужно перекодировать файл, так и пишите:
|
| Автор: Atanvarno 8.6.2009, 19:28 |
| xvr,Спасибо Вам большое! Таперича всё работает аки часы. |