Здравствуйте, у меня есть реализация rc5, на c++(утащил с гита). Взял, чтобы понять, что вообще происходит в этом блочном шифре.
На гитхабе посмотрел разные реализации и rc5, и rc6. Так и не понимаю, как вообще должен быть введен текст?
Знаю, что ключ, например, нужно вводить пользователю, а в виде текста? В виде hex'а? Или этот текст нужно будет ещё и переводить в hex в программе?
Просто в с++ нет надстройки в своих библиотеках, чтобы сразу переводить текст в 16-ый вид.
Криптографические алгоритмы работают с бинарными данными.
как вообще должен быть введен текст
Как угодно. В виде строки, hex string, base64 encoded binary string, 32-bit word array и т.д.
Это все потом преобразовать в бинарный формат. В случае строки, не забыв учесть кодировку, с которой закодирован текст.
Под работай с бинарными даннымим я имел в виду работу с массивом байт, uint8 (например), или массивом интов – uint32, не забыв учесть в этом случае endian (big или little).
Поскольку результат – тоже бинарные данные, можно их потом преобразовать в hex-string или закодировать в base64, либо же так и оставить – в зависимости от ситуации.
Схема при которой пользователь вводит НЕЧТО с клавиатуры и это нечто расматривается как ключ шифрования - очень слабая схема и не выдерживает атак. Пользоватль ленив и глуп. И всегда будет стараться вводить пароли и ключи по 1-2 символа. С этим ничего не поделать. Поэтому если автор заинтересован чтобы поле ключей было более сложным - надо использовать во первых SALT в совокупности с паролем. И использовать функцию хеширования наподобие SHA1 чтобы получить более-менее сложый ключ. В некоторых случаях (сеансовые ключи) можно получить энтропию из внешнего мира (часы в микросекундах и текущее положение мышки на экрасне).
Тоесть само наличие в схеме алгоритма RC5 еще не гарантирует что у тебя система надежна. Нужно чтобы ее использование было чистым и лишенным человеческого фактора.
Я интересовался вводом не только ключа шифрования, но и текста. Ну понятно же, что этот алгоритм шифрует текст, а не просто рандомно перебирает биты информации. Вот и заглянув в документацию по ссылке в википедии обнаружил, что там нет примера текста,который шифруется, а есть пример только с нулевым ключом и рандомными битами текста. Я то хз как он там должен разбивать текст по переменным: записывать в 4 переменные каждое слово, предложение или весь текст?
Есть семантическая путаница. В криптографии под термином "открытй текст" подразумевают любые исходные данные подлежащие шифрованию. И шифро-текст - это уже результат этого процесса. Тоесть мы всегда работаем в binary-mode. И оперируем BLOB.
А теперь главный вопрос. Каким образом текстовый файл становится двоичным. Это криптография не расматривает. Ей это просто неинтересно. Это не шифрование а кодирование. Но если вы пользователь С++ то знаете что string может быть либо однобайтным либо двухбайтным потоком байт и дальше действуйте самостотельно по конверсии из одного формата в другой. Вообще - пофиг как вы сделаете из строки BLOB. Главное - что на выходе у вас будет стоять симметричное обратное преобразование. Из BLOB в String. Функций - уйма. Берите любую т.к. это софт ваш и вам надо строить внутренний протокол представления строк в вашей системе.