Шифрование текста по Вижинеру
Шифрование текста по Вижинеру
Шифрование текста по Вижинеру Схема шифрования Вижинера. Таблица Вижинера представляет собой квадратную матрицу с n^2 элементами, где n число символов используемого алфавита. На Схеме 1 показана верхняя часть таблицы Вижинера для кириллицы. Каждая строка получена циклическим сдвигом алфавита на символ. Для шифрования выбирается буквенный ключ, в соответствии с которым формируется рабочая матрица шифрования. а >> б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я б >> в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а в >> г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б г >> д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в д >> е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в г И т.д. до 33-ей строки... Шифрование осуществляется следующим образом. Из полной таблицы выбирается первая строка и те строки, первые буквы которых соответствуют буквам ключа. Первой размещается первая строка, а под нею -- строки, соответствующие буквам ключа в порядке следования этих букв в ключе шифрования. Пример такой рабочей матрицы для ключа <книга>: а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в г д е ё ж з и й н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в г д е ё ж з и й к л м и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в г д е ё ж з г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я Рабочая матрица шифрования для ключа <книга>. 1. под каждой буквой шифруемого текста записываются буквы ключа. Ключ при этом повторяется необходимое число раз. 2. каждая буква шифруемого текста заменяется по подматрице буквами находящимися на пересечении линий, соединяющих буквы шифруемого текста в первой строке подматрицы и находящимися под ними букв ключа. 3. полученный текст может разбиваться на группы по несколько знаков. Пусть, например, требуется зашифровать сообщение: максимально допустимой ценой является пятьсот руб. за штуку. В соответствии с первым правилом записываем под буквами шифруемого текста буквы ключа. Получаем: максимально допустимой ценой является пятьсот руб. за штуку книгакнигак нигакнигак нигак нигакниг акнигак ниг ак нигак Дальше осуществляется непосредственное шифрование в соответствии со вторым правилом, а именно: берем первую букву шифруемого текста (М) и соответствующую ей букву ключа (К); по букве шифруемого текста (М) входим в рабочую матрицу шифрования и выбираем под ней букву, расположенную в строке, соответствующей букве ключа (К),-- в нашем примере такой буквой является Ч; выбранную таким образом букву помещаем в зашифрованный текст. Эта процедура циклически повторяется до зашифрования всего текста. Эксперименты показали, что при использовании такого метода статистические характеристики исходного текста практически не проявляются в зашифрованном сообщении. Нетрудно видеть, что замена по таблице Вижинера эквивалентна простой замене с циклическим изменением алфавита, т.е. здесь мы имеем полиалфавитную подстановку, причем число используемых алфавитов определяется числом букв в слове ключа. Поэтому стойкость такой замены определяется произведением стойкости прямой замены на число используемых алфавитов, т.е. число букв в ключе. Расшифровка текста производится в следующей последовательности: 1. над буквами зашифрованного текста последовательно надписываются буквы ключа, причем ключ повторяется необходимое число раз. 2. в строке подматрицы Вижинера, соответствующей букве ключа отыскивается буква, соответствующая знаку зашифрованного текста. Находящаяся под ней буква первой строки подматрицы и будет буквой исходного текста. 3. полученный текст группируется в слова по смыслу. Нетрудно видеть, что процедуры как прямого, так и обратного преобразования являются строго формальными, что позволяет реализовать их алгоритмически. Более того, обе процедуры легко реализуются по одному и тому же алгоритму. Одним из недостатков шифрования по таблице Вижинера является то, что при небольшой длине ключа надежность шифрования остается невысокой, а формирование длинных ключей сопряжено с трудностями. Кнопка "Шифрование" procedure TForm1.Button1Click(Sender: TObject); Var i:integer;s,k:string; begin S:=Edit1.Text; k:=Edit2.Text; for i := 1 to Length(s) do if (S[i]<>' ')AND(s[i]<>'.')AND(s[i]<>';')AND(s[i]<>',') then s[i]:=Chr( Ord(s[i])+Ord(k[i mod length(k)+1])mod 256); Edit3.Text:=s; end; Кнопка "Расшифрование" procedure TForm1.Button2Click(Sender: TObject); Var i:integer;s:string; begin S:=Edit1.Text; for i := 1 to Length(s) do if S[i]<>' ' then s[i]:=Chr((Ord(s[i])-Ord(Edit2.text[(i mod length(Edit2.text))+1]))mod 256); Edit3.Text:=s; end;