Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102

Алгоритм шифрования RC4 не совсем корректно работает

28.11.2014, 11:38. Показов 2731. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Знаю что тема избитая, но всё таки хочется понять проблему и решить.
Алгоритм разобрал и написал.
Спасибо википедии.
Пример взял здесь.
https://ru.wikibooks.org/wiki/... %D0%B8_RC4
 Комментарий модератора 
Переписывайте тексты в сообщение
(можно в видк цитаты).

Теперь по проблеме.
Данная реализация шифрует и расшифровывает файл.
НО расшифровка проходит на половину.
То есть половина файла нормально расшифровывается а оставшаяся часть полный бред.
На самом деле конечно не половина файла расшифровывается а гораздо меньше,
примерно 1/10.
Собственно вопрос: Где грабли и как починить?
У меня есть соображения на вот эту строку.
j = ( j + key[ i % key_length ] + S[ i ] ) % 256;
По-моему вот в этом месте key[i % key_length] вылазием за рамки массива key.
Подскажите гуру решение!

Добавлено через 1 час 0 минут
Вот реализация из википедии.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
unsigned char S[ 256 ];
unsigned int i, j;
 
/* ключевое расписание */
void rc4_init( unsigned const char* key, unsigned int key_length )
  {
    unsigned char temp;
 
    for( i = 0; i != 256; ++i )
      S[ i ] = i;
 
    for( i = j = 0; i != 256; ++i )
      {
        j = ( j + key[ i % key_length ] + S[ i ] ) % 256;
        temp = S[ i ];
        S[ i ] = S[ j ];
        S[ j ] = temp;
      }
 
    i = j = 0;
  }
 
/* Вывод одного псевдослучайного байта */
unsigned char rc4_output()
  {
    unsigned char temp;
 
    i = ( i + 1 ) % 256;
    j = ( j + S[ i ] ) % 256;
 
    temp = S[ j ];
    S[ j ] = S[ i ];
    S[ i ] = temp;
 
    return S[ ( temp + S[ j ] ) % 256 ];
  }
Ну что никто ничего не скажет?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2014, 11:38
Ответы с готовыми решениями:

Алгоритм шифрования RC4
не могу понять,что такое такое алгоритм шифрования RC4. (и если можно его реализацию). очень надо!

Код работает не совсем корректно со строками
почему-то при любом количестве строк,которое я задаю,он позволяет написать только одну,а потом переходит к следующему пункту и вообще...

Написал програму, но она не совсем корректно работает
Создать класс - дата с полями в закрытой части: день (1-31), месяц (1-12), год (целое число). Определить конструктор, деструктор, функции...

6
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.11.2014, 14:30
Что здесь смотреть? Ты свою реализацию показывай.
0
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
28.11.2014, 16:09  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Что здесь смотреть? Ты свою реализацию показывай.
В каком смысле?
Это и есть реализация...
Читаю файл в массив сначала.
C
1
2
3
4
5
6
7
file.seekg(0, ios::end);
len = file.tellg();
file.seekg(0, ios::beg);
 
buf = new char[len + 1];
 
file.read(buf, len);
Подаю на выход к генератору.
C
1
2
3
4
char *out = new char[len + 1];
 
for (unsigned int i = 0; i < len; i++)
out[i] = buf[i] ^ rc4_output();
И записываю обратно что получилось в файл.
C
1
file.write(out, len);
И всё.....
P.S. Обнаружил следующие.
После записи в файл размер файла изменяется на большей.
Вот например реальные цифры.
Исходный файл 151945 байт.
После шифрования увеличился на 616 байт и стал 152561 байт.
Взял другой файл.
Исходный размер 14220.
После шифрования увеличился на 65 байт.
При чём я считываю файл и записываю в глобальную переменную размер массива.
Выделяю для результата такой же массив плюс 1 байт.
И записываю в файл ровно столько же сколько и прочитал.
Т.е. у меня везде одна и та же переменная с одним значением полученным при чтении исходного файла.
Откуда берутся лишние байты я понять не могу.
Файл при записи открывается для перезаписи.
Да и вобще я удалял старый чтобы файл создавался заново.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.11.2014, 18:15
Зачем этот лишний байт?
Файлы-то разные у тебя? Если нет, то закрой после чтения и открой снова на запись.
0
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
28.11.2014, 18:47  [ТС]
Конечно в разные файлы пишет, само собой.
Лишний байт по привычки да и так сказать на всякий случай.
Но он роли не играет.
Везде указывается один размер, первоначальный.
Да и один байт это не десятки и сотни лишних.
В википедии в скольз упоминаются оказии с долгим использованием ключа,
но тольком как бороться с этим не написано.
Вот цитата:

В отличие от современных шифров (таких, как в eSTREAM), RC4 не использует отдельной оказии (англ.*nonce) наряду с ключом. Это значит, что если один ключ должен использоваться в течение долгого времени для шифрования нескольких потоков, сама криптосистема, использующая RC4, должна комбинировать оказию и долгосрочный ключ для получения потокового ключа для RC4. Один из возможных выходов*— генерировать новый ключ для RC4 с помощью хэш-функции от долгосрочного ключа и оказии. Однако многие приложения, использующие RC4, просто конкатенируют ключ и оказию.

Вот не из за этого ли такая штука получается*
Если да, то как поправить.
Что такое есть эта оказия и как с ней бороться?
Как конкатенировать ключ и эту оказию?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
29.11.2014, 11:48
Если out и buf одинаковы, то никак длиннее файл не станет.
0
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
29.11.2014, 15:05  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Если out и buf одинаковы, то никак длиннее файл не станет.

А Вы сначала попробуйте, а потом пишите...
Я тоже думал что не может быть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.11.2014, 15:05
Помогаю со студенческими работами здесь

Алгоритмы шифрования RC4, DES, RSA
подкиньте плиз алгоритмы RSA, DES, RC4. Желательно с пояснениями, т.к. в СИ пока новичок :scratch: Программка необходима как приложение к...

Алгоритм шифрования RC4
Кто-то может человеческим языком объяснить алгоритм шифрования RC4, а также привести исходный код на С# или на Java? А также привести...

Не совсем понятен алгоритм шифрования/дешифрования шифра ГОСТ 28147-89
Подробный алгоритм в файле. Ключ для шифрования-K0K1K2K3K4K5K6K7K0K1K2K3K4K5K6K7K0K1K2K3K4K5K6K7K7K6K5K4K3K2K1K0 Дешифрования -...

не совсем корректно работает
скрипт повесил в onload, но после загрузки страницы в браузере firefox остается значок загрузки страницы, событие прописал не в body, а к...

Не совсем корректно работает Like
Добрый день! Подскажите пожалуйста в чем загвоздка? Имеем две формы. Выбор и Заказы. Первичная - &quot;Выбор&quot;, в которой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru