URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 4849
[ Назад ]

Исходное сообщение
"RC5-Блочный алгоритм. Как шифровать данные произвольной длинны?"

Отправлено xintrea , 11-Май-11 15:51 
Здравствуйте!


Нужно мне в свою C++ программу вставить шифрование файла с помощью RC5. Алгоритм открытый, примеров с реализацией шифрования [u]одного[/u] блока много.

Описание на руском: http://ru.wikipedia.org/wiki/RC5
Теория на английском: http://theory.lcs.mit.edu/~rivest/Rivest-rc5rev.pdf
Исходник с примером: http://paste.org.ru/?f8go6z

Данный исходник подходит для шифрования двух 32-х битных слов (двух WORD).


Вопрос. А как шифровать байтовый поток данных произвольной длинны?

Например, имеем 20 байт.
1. Выделяем первые 8 байт, шифруем ключем.
2. Выделяем следующие 8 байт, шифруем тем же ключем.
3. Выделяем следующие 4 байта, дополняем нулями, шифруем тем же ключем.

Так чтоли? То есть получается, что одинаковый набор символов, кратный 8 байтам и выровненный на 8 байт, будет в зашифрованном виде представляться одной и той же зашифрованной последовательностью?


Пример на пальцах. Имеем поток ASCII-кодов следующих символов (условно разбит на строки):

ABCDEFGH
djkfhdfk
ABCDEFGH
pouwerbe

Зашифрованный поток будет иметь, к примеру, такой HEX-вид:

65C178B284D197CC
2F42B3B70369FC92
65C178B284D197CC
F7C013AC5B2B8916

То есть, первая и третья зашифрованные строки будут одинаковы. Так и должно быть? Или я неправильно понял, как надо использовать этот алгоритм?


Содержание

Сообщения в этом обсуждении
"RC5-Блочный алгоритм. Как шифровать данные произвольной длинны?"
Отправлено Andrey Mitrofanov , 11-Май-11 17:28 
> Описание на руском: http://ru.wikipedia.org/wiki/RC5

http://ru.wikipedia.org/wiki/%D0%A0%D0%B...

> Вопрос. А как шифровать байтовый поток данных произвольной длинны?
> Так чтоли? То есть получается, что одинаковый набор символов, кратный 8 байтам
> и выровненный на 8 байт, будет в зашифрованном виде представляться одной
> и той же зашифрованной последовательностью?

И менно так и получается, если применять блочный шифр к потоку _в_лоб_.

> То есть, первая и третья зашифрованные строки будут одинаковы. Так и должно
> быть? Или я неправильно понял, как надо использовать этот алгоритм?

Конечно! :)


"RC5-Блочный алгоритм. Как шифровать данные произвольной длинны?"
Отправлено Voyagerur , 13-Май-11 12:38 
>[оверквотинг удален]
>> Описание на руском: http://ru.wikipedia.org/wiki/RC5
> http://ru.wikipedia.org/wiki/%D0%A0%D0%B...
>> Вопрос. А как шифровать байтовый поток данных произвольной длинны?
>> Так чтоли? То есть получается, что одинаковый набор символов, кратный 8 байтам
>> и выровненный на 8 байт, будет в зашифрованном виде представляться одной
>> и той же зашифрованной последовательностью?
> И менно так и получается, если применять блочный шифр к потоку _в_лоб_.
>> То есть, первая и третья зашифрованные строки будут одинаковы. Так и должно
>> быть? Или я неправильно понял, как надо использовать этот алгоритм?
> Конечно! :)


"RC5-Блочный алгоритм. Как шифровать данные произвольной длинны?"
Отправлено ImPressed , 12-Май-11 02:32 
>[оверквотинг удален]
> djkfhdfk
> ABCDEFGH
> pouwerbe
> Зашифрованный поток будет иметь, к примеру, такой HEX-вид:
> 65C178B284D197CC
> 2F42B3B70369FC92
> 65C178B284D197CC
> F7C013AC5B2B8916
> То есть, первая и третья зашифрованные строки будут одинаковы. Так и должно
> быть? Или я неправильно понял, как надо использовать этот алгоритм?

Дополнять шифуемое сообщение до длины кратной длине блока блочного шифра или нулями или случайным шумом.  А еще лучше не пользоватьться режимом ECB а пользоваться например CBC или n-битовым OFB.