Мы вместе научимся как создавать простейший блочный шифр он же шифр Цезаря и как его программным путем взломать.
Данная система шифрования является моноалфавитной подстановкой. Что это значит? это значит что алфавит применяется один в отличии от полиалфавитной подстановки. Алфавит всего лишь сдвигается на число K (которое является ключем) т.е если ключ 3 и алфавит английский то бука С=А D=B E=C и всего лишь.
Насколько мы помним в английском алфавите 26 символов(не считая 26 заглавных если конечно мы их будем учитывать в шифре,учитывать регистр букв) а ключ является просто числом. То возникает вопрос а что будет если ключ превысит число 26 ?
Очень интересный вопрос :) Ответ найдем в коде программы. Данный шифр имеет одну особенность он симметричный т.е операция шифрования и дешифрования одна и таже XOR.
Если брать стандартный метод взлома шифра те что использовали ранее криптоаналитики
то мы увидим что они следовали протоптанной тропой а точнее брали очень большой текст - книгу энциклопедию из английского репертуара (если шифр написан на английском) и совершали обряд :) подсчета одинаковых символов во всем тексте дабы выяснить какие буквы в алфавите самые часто употребляемые.
Для нетерпеливых скажу что это t,h,e - the в русском это гласные а,и,е если не ошибаюсь проверьте сами посмотрев таблицу или написав программу для подсчета буковок.
Дальнейшее действие какое? У нас есть таблица алфавита основного языка шифрования (на каком языке зашифрованно) и теперь мы составляем вторую таблицу делая такой же поиск одинаковых символов в шифре. Далее просто действуем путем подстановки самый часто употребляемый символ в шифре Цезаря должен быть тем самым что в первой таблице
достаточно пару букв представить и если получается осмысленный текст то дело в шляпе,
иначе у нас либо мало шифрованного текста либо это не шифр Цезаря либо что-то с чем то (модификация данного шифра,да и вообще кто вам сказал что это шифр Цезаря? ))))
Теперь перейдем к другому методу т.к операция шифрования по сути является XOR то
посмотрим как здесь обстоит дело с расшифровкой.
Не буду лить воду а опишу всю поднаготную.Берем части- кусочки шифра и налаживаем на сам шифр берем от 3х символов кода до длинны всего шифра и смотрим что получается,длину ключа мы определим когда разница между двумя кусочками шифра будет минимальна.
Зная длину ключа-пароля мы просто начнем сдвигать алфавит и проверять.
Может объяснил сумбурно и не понятно,но надеюсь в коде будет все понятно и мы вместе разберемся. А пока приведу код самого шифра,а точнее это будут две программы одна шифрует другая расшифровывает по традиции они будут консольными, ничего не стоит их переписать под "окошный" вид.
program Crypt;
{$APPTYPE CONSOLE}
uses Windows,sysutils;
var key, text, longkey, result : string;
i : integer;
toto, c : char;
F : TextFile;
begin
writeln('Enter the key:');
readln(key);
writeln('Enter text:');
readln(text);
for i := 0 to (length(text) div length(key)) do
longkey := longkey + key;
for i := 1 to length(text) do begin
toto := chr((ord(text[i]) XOR ord(longkey[i]))); // XOR algorithm
result := result + toto;
end;
writeln('The crypted text is:');
writeln(result);
write('Should i save it to result.txt ?');
read(c);
if c in ['Y','y'] then begin
AssignFile(F,'result.txt');
Rewrite(F);
Writeln(F,result);
CloseFile(F);
end;
end.
И программа расшифровки
program Decrypt;
{$APPTYPE CONSOLE}
uses Windows;
var key, c_text, longkey, result : string;
i : integer;
toto : char;
F : TextFile;
begin
writeln('Enter the key:');
readln(key);
writeln('Please make sure you have the file "result.txt" in the current directory');
// it takes the output file from Crypt.exe
AssignFile(F,'result.txt');
Reset(F);
Readln(F,c_text);
CloseFile(F);
for i := 0 to (length(c_text) div length(key)) do
longkey := longkey + key;
for i := 1 to length(c_text) do begin
toto := chr((ord(c_text[i]) XOR ord(longkey[i]))); // XOR algorithm
result := result + toto;
end;
writeln('The decrypted text is:');
writeln(result);
readln;
end.
Все просто и понятно,далее опишу как изменить программы под взлом и сделать их более удобными возможно даже рассмотрим окошный вид а не консольный стиль,ну и конечно же реализуем алгоритм взлома шифра.
Данная система шифрования является моноалфавитной подстановкой. Что это значит? это значит что алфавит применяется один в отличии от полиалфавитной подстановки. Алфавит всего лишь сдвигается на число K (которое является ключем) т.е если ключ 3 и алфавит английский то бука С=А D=B E=C и всего лишь.
Насколько мы помним в английском алфавите 26 символов(не считая 26 заглавных если конечно мы их будем учитывать в шифре,учитывать регистр букв) а ключ является просто числом. То возникает вопрос а что будет если ключ превысит число 26 ?
Очень интересный вопрос :) Ответ найдем в коде программы. Данный шифр имеет одну особенность он симметричный т.е операция шифрования и дешифрования одна и таже XOR.
Если брать стандартный метод взлома шифра те что использовали ранее криптоаналитики
то мы увидим что они следовали протоптанной тропой а точнее брали очень большой текст - книгу энциклопедию из английского репертуара (если шифр написан на английском) и совершали обряд :) подсчета одинаковых символов во всем тексте дабы выяснить какие буквы в алфавите самые часто употребляемые.
Для нетерпеливых скажу что это t,h,e - the в русском это гласные а,и,е если не ошибаюсь проверьте сами посмотрев таблицу или написав программу для подсчета буковок.
Дальнейшее действие какое? У нас есть таблица алфавита основного языка шифрования (на каком языке зашифрованно) и теперь мы составляем вторую таблицу делая такой же поиск одинаковых символов в шифре. Далее просто действуем путем подстановки самый часто употребляемый символ в шифре Цезаря должен быть тем самым что в первой таблице
достаточно пару букв представить и если получается осмысленный текст то дело в шляпе,
иначе у нас либо мало шифрованного текста либо это не шифр Цезаря либо что-то с чем то (модификация данного шифра,да и вообще кто вам сказал что это шифр Цезаря? ))))
Теперь перейдем к другому методу т.к операция шифрования по сути является XOR то
посмотрим как здесь обстоит дело с расшифровкой.
Не буду лить воду а опишу всю поднаготную.Берем части- кусочки шифра и налаживаем на сам шифр берем от 3х символов кода до длинны всего шифра и смотрим что получается,длину ключа мы определим когда разница между двумя кусочками шифра будет минимальна.
Зная длину ключа-пароля мы просто начнем сдвигать алфавит и проверять.
Может объяснил сумбурно и не понятно,но надеюсь в коде будет все понятно и мы вместе разберемся. А пока приведу код самого шифра,а точнее это будут две программы одна шифрует другая расшифровывает по традиции они будут консольными, ничего не стоит их переписать под "окошный" вид.
program Crypt;
{$APPTYPE CONSOLE}
uses Windows,sysutils;
var key, text, longkey, result : string;
i : integer;
toto, c : char;
F : TextFile;
begin
writeln('Enter the key:');
readln(key);
writeln('Enter text:');
readln(text);
for i := 0 to (length(text) div length(key)) do
longkey := longkey + key;
for i := 1 to length(text) do begin
toto := chr((ord(text[i]) XOR ord(longkey[i]))); // XOR algorithm
result := result + toto;
end;
writeln('The crypted text is:');
writeln(result);
write('Should i save it to result.txt ?');
read(c);
if c in ['Y','y'] then begin
AssignFile(F,'result.txt');
Rewrite(F);
Writeln(F,result);
CloseFile(F);
end;
end.
И программа расшифровки
program Decrypt;
{$APPTYPE CONSOLE}
uses Windows;
var key, c_text, longkey, result : string;
i : integer;
toto : char;
F : TextFile;
begin
writeln('Enter the key:');
readln(key);
writeln('Please make sure you have the file "result.txt" in the current directory');
// it takes the output file from Crypt.exe
AssignFile(F,'result.txt');
Reset(F);
Readln(F,c_text);
CloseFile(F);
for i := 0 to (length(c_text) div length(key)) do
longkey := longkey + key;
for i := 1 to length(c_text) do begin
toto := chr((ord(c_text[i]) XOR ord(longkey[i]))); // XOR algorithm
result := result + toto;
end;
writeln('The decrypted text is:');
writeln(result);
readln;
end.
Все просто и понятно,далее опишу как изменить программы под взлом и сделать их более удобными возможно даже рассмотрим окошный вид а не консольный стиль,ну и конечно же реализуем алгоритм взлома шифра.
Комментариев нет:
Отправить комментарий