| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > rc4 шифрование/дешифрование строки |
| Автор: Kasiro 17.9.2012, 23:38 |
| Доброго времени суток. Необходимо шифровать/дешифровать строку алгоритмом RC4. Нашел в инете исходники http://www.codeproject.com/Articles/35374/Two-Efficient-Classes-for-RC4-and-Base64-Stream-Ci (rc4, вывод текста base64) вроде работают нормально, но есть ошибки, к примеру clear_temporary_files=0 - 1snHkN01uvr9XqrVDRJTcqBP66YAHHI= (а у меня получается 1snHkN01uvr9XqrVDRJTcqBP66ZzHDE= ) расшифровка в таком случае немного кривая, большая часть фразы расшифровывается корректно, но есть и косяки в чем дело не могу понять Проверял корректность шифрования с помощью онлайн сервиса http://isv.appspot.com/app/enc есть ли у кого нибудь рабочий код шифрования/дешифрования RC4? PS: пробовал пользоваться DCPCrypt, хорошая библиотека, но вот какой ключ используется в процесси шифровки я так и не понял, библиотека каким то хитрым образом вычисляет реальный ключ на основе того с которого идет инициализация.... если кто нибудь знает как в этот компонент подсунуть свой ключ - я был бы очень благодарен. |
| Автор: artsb 18.9.2012, 09:00 | ||||||
| У меня всё работает. С сайта http://isv.appspot.com/app/enc
У меня
ЗЫ извиняюсь за кривой код. |
| Автор: Kasiro 18.9.2012, 09:40 |
| Да, все верно, пробовал ваш вариант, все получилось как на сайте затем попробовал ваш код только со своим ключем, и получил проблему которая и была Текстовый ключ: KfSLOhtP7SPBdvRlNIKu4sR3suLQ6bcd4621d373cade Строка для шифрования: clear_temporary_files=0 Результат в BASE64 (на сайте): 1snHkN01uvr9XqrVDRJTcqBP66YAHHI= Результат в BASE64 (в проге): 1snHkN01uvr9XqrVDRJTcqBP66ZzHDA= есть идеи? мб ключ слишком длинный? |
| Автор: Kasiro 18.9.2012, 09:55 |
| что интересно, если в этом ключе я удаляю хоть один символ, все начинает работать как надо.... |
| Автор: artsb 18.9.2012, 11:44 | ||||||
| Разобрался. ВОт это закомментируйте:
Удалите define:
Вместо него используйте функцию:
|
| Автор: Kasiro 18.9.2012, 12:42 | ||
| спасибо, сделал все как вы написали, но получил результат вот такой: Name Value D { "1snHkN01uvr9XqrVDRJTcqBP66Y=" } закоментировал вот так:
|
| Автор: artsb 18.9.2012, 13:07 | ||
| Ах, да. Нужно длину строки заранее запоминать, т.к. теперь в строке могут быть '\0'. Т.е. как-то так:
|
| Автор: Kasiro 18.9.2012, 15:16 | ||
| спасибо огромное)) работает как надо) а не подскажите как сделать обратный процесс? расшифровку? потому что тот вариант что наваял я, возвращает мне только кусочек фразы - clear_temporary_file
|
| Автор: artsb 18.9.2012, 15:34 | ||||
Всё тот же злополучный 0. Класс будет выглядеть так:
Добавлено через 2 минуты и 11 секунд
|
| Автор: Kasiro 18.9.2012, 16:00 |
| спасибо большое) все отлично работает |