R@kot |
Отправлено: 19.04.2005, 00:58 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 32
|
Требуется реализовать алгоритм шифрования данных.
Одной из частей придуманного алгоритма является так называемое "гаммирование", т.е. на изначальный текст накладывается "гамма" на основе введённого пользователем ключа:
например, начальный текст "это начальный текст" и ключ "!". Символы преобразуются в численные коды этих символов, а затем "складываются по модулю 2" (операция XOR, она же "^") с ключом. Т.е. код символа "э" (253) складывается по модулю 2 с кодом символа "!" (33) (в результате получается число 220, а это код символа "Ь"), затем код символа "т" складывается по модулю 2 с кодом символа "!" и т.д.. Таким образом, после шифрования вместо фразы "это начальный текст" получается что-то типа "Ь..... и т.д.". Полученный зашифрованный текст отображается в Edit'е на форме, чтобы его можно было скопировать и куда-нибудь передать.
А вот в чём заключается проблема: если символ ключа совпадает с одним из символов открытого текста (например, ключ "э"), тогда при сложении по модулю 2 двух одинаковых чисел получается "0". А "0" — то это код символа окончания строки ('\0'). А он не только не отображается в Edit'е, но и глушит все символы, идущие после него.
Вопрос, как обойти эту проблему и сделать так, чтобы зашифрованный текст можно было бы отобразить?
|
|
AVC |
Отправлено: 19.04.2005, 08:34 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Можно так — если результат = 0 то xor не применяется. |
|
Treumer |
Отправлено: 19.04.2005, 09:34 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
QUOTE (R@kot @ 19/04/2005, 00:58) | Требуется реализовать алгоритм шифрования данных.
Одной из частей придуманного алгоритма является так называемое "гаммирование", т.е. на изначальный текст накладывается "гамма" на основе введённого пользователем ключа:
например, начальный текст "это начальный текст" и ключ "!". Символы преобразуются в численные коды этих символов, а затем "складываются по модулю 2" (операция XOR, она же "^") с ключом. Т.е. код символа "э" (253) складывается по модулю 2 с кодом символа "!" (33) (в результате получается число 220, а это код символа "Ь"), затем код символа "т" складывается по модулю 2 с кодом символа "!" и т.д.. Таким образом, после шифрования вместо фразы "это начальный текст" получается что-то типа "Ь..... и т.д.". Полученный зашифрованный текст отображается в Edit'е на форме, чтобы его можно было скопировать и куда-нибудь передать.
А вот в чём заключается проблема: если символ ключа совпадает с одним из символов открытого текста (например, ключ "э"), тогда при сложении по модулю 2 двух одинаковых чисел получается "0". А "0" — то это код символа окончания строки ('\0'). А он не только не отображается в Edit'е, но и глушит все символы, идущие после него.
Вопрос, как обойти эту проблему и сделать так, чтобы зашифрованный текст можно было бы отобразить? |
Очень рекомендую переводить результат гаммирования в BASE64.
Гарантированое отсутствие нечитаемых символов!
Отредактировано Treumer — 19/04/2005, 09:35 |
|
R@kot |
Отправлено: 19.04.2005, 14:37 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 32
|
Treumer, а можно поподробнее насчёт перевода в этот самый BASE64?
|
|
Boyko |
Отправлено: 19.04.2005, 16:34 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
QUOTE (R@kot @ 18/04/2005, 23:58) |
Вопрос, как обойти эту проблему и сделать так, чтобы зашифрованный текст можно было бы отобразить? |
А так делают криптологи:
Set1 — хорошие символы, которые могуть печататься.
Set2 — плохие символы, которые не могуть печататься.
берем хороший символ, например "А",
шифрование:
гаммируем,
эсли результат из Set1-{A} — все в порядке,
эсли результат из Set2+{A} — то резултат = А и гаммируем тот же самый символ снова следующим байтом гаммы
дешифрование:
эсли символ = А, отбрасываем его, отбрасываем 1 байт гаммы
эсли символ != А, гаммируем...
|
|
*Treumer |
Отправлено: 19.04.2005, 17:25 |
|
Не зарегистрирован
|
QUOTE (R@kot @ 19/04/2005, 14:37) | Treumer, а можно поподробнее насчёт перевода в этот самый BASE64? |
http://www.acnet.ge/networking/applic_l/fo...rmat/base64.htm |
|
|