![]() |
программа шифрования алгоритм RC4
Помогите найти ошибку. При нажатии на кнопку расшифровать расшифровывает цифры неправильно, получается бессмыслица, а должен быть текст. вот полное задание
Рассматривается симметричный криптографический алгоритм RC4 (шифрование и расшифровка производятся с помощью одного и того же секретного ключа). Преобразование текста производится путем применения логической операции исключающего ИЛИ (XOR) к битам текущего символа текста и соответствующего (по порядку) символа ключевой последовательности (гаммы). Гамма представляет собой псевдослучайную последовательность чисел, метод получения которой основан на использовании S-блока. S-блок размером 8*8=256 – это массив S0, S1, …, S255, элементы которого представляют собой перестановку чисел от 0 до 255, зависящую от ключа переменной длины. При инициализации S-блок заполняется линейной последовательностью чисел: S0 = 0, S1 = l, …, S255 = 255. Элементы гаммы генерируются затем с помощью итерационной процедуры, в которой начальное значение целочисленного счетчика i принимается равным нулю, а начальное значение j (0j255) – является секретным ключом: i = (i + 1) mod 256 j = (j + Si) mod 256 Элементы S-блока Si и Sj меняются местами t = (Si + Sj) mod 256 G = St Здесь mod 256 – операция взятия остатка целочисленного деления по модулю 256, G – очередной элемент гаммы. Задание. 1. Написать программу, реализующую шифрование и расшифровку алгоритмом RC4 указанного вида. Открытый текст сообщения содержит только ASCII-символы, а гамма и шифртекст – десятичные числа от 0 до 255. 2. С помощью программы шифрования/расшифровки получить открытый текст по следующему шифртексту: при условии, что cекретный ключ j = 231. Указания для выполнения задания. Организовать цикл для поэлементной расшифровки сообщения. В теле цикла: a. Перевести очередное десятичное число из шифртекста в двоичный код; b. Получить очередной элемент гаммы, который также перевести в двоичный код; c. В цикле произвести операцию XOR над соответственными разрядами (битами) двоичных кодов шифртекста и гаммы; d. Результат (двоичный код) перевести в десятичное число (ASCII-код), а затем в соответствующий символ из ASCII. Код:
Option Strict Off |
Anton Naumov, можно осмысленные имена переменных, отступы и комментарии перед каждым циклом с описанием идеи? Я вот это
Цитата:
Вообще считаю что можно было оставить одну функцию для кодирования-декодирования (т.к. оператор XOR обратим), тогда бы не было проблем с неправильным восстановлением. |
я нашел ошибку
|
Anton Naumov, так почему её не указать публично?
Всем кому интересна данная тема. Во первых наблюдаем опечатку - T. ext_Renamed.Text = "" Нужно исправить на Text_Renamed.Text = "" Создаётся впечатление что код даже не пробовали собирать. Хотя с другой стороны, по умолчанию среда, при неудачном сборе, запускает последний удачно собранный бинарник (не знаю, на сколько это было правильно сделано со стороны MS, да и зачем? Без проблемная философия .NET?), так что вполне возможно внося правку допустили опечатку. Тем не менее, нужно внимательно следить за тем, с репрезентацией какого исходника сейчас имеем дело, читать сообщения во время сборки. Далее, если б код был изначально написан с рекомендацией pva (CmdDecr + CmdEncr) - следующей ошибки могло и не быть. Код:
Private Sub CmdDecr_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdDecr.Click Должно быть (по аналогии с Private Sub CmdEncr_Click) так G = S(t) X = Asc_Renamed(b) Xor G Ещё конечно остаются по оптимизации программы (не самого алгоритма, а именно программной части). |
именно такую ошибку я и нашел. спасибо
|
Время: 23:47. |
Время: 23:47.
© OSzone.net 2001-