ЛАБОРАТОРНАЯ РАБОТА ПО ДИСЦИПЛИНЕ
"ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ"
Шифр Цезаря относится к симметричному
шифрованию, т.е. при шифровании и при расшифровании используется один и тот же
ключ. Для создания программы «Шифрование методом Цезаря» запустим программу Delphi 6. пуск\программы\borland delphi6\delphi 6.
Для начала разместим на форме следующие
компоненты. С вкладки standard
– 6 кнопок Button, memo – поле, поле ввода ключа – EDIT, две метки – LABEL. У кнопок Button, меток LABEL измените свойство CAPTION, у поля EDIT очистите свойство TEXT в соответствии со следующим рисунком (рис 10):


Рис 10.
Далее разместим на форме компоненты OPENDIALOG,SAVEDIALOG с
вкладки DIALOGS.
В поле MEMO будем вводить текст который
мы хотим зашифровать. А в поле EDIT
будем вводить ключ для зашифрования и для расшифрования.
Запрограммируем кнопку Шифрование.
z:=0;
kir:=';,.(:)[]*+/-=#^%!?<>@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl
mnopqrstuvwxyz1234567890АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЫЭЮЯабвгдеёжзийклмнопрстуфхцчшщъьыэюя’;
a:=memo1.Text;
q:=length(a);
kl:=strtoint(edit1.Text);
for k:=1 to q
do begin
for i:=1 to 150 do begin
if a[k]=kir[i]
then begin
j:=(i+kl)mod
150;
b:=b+kir[j];
end;
end;
end;
memo1.Text:=b;
а между словами PROCEDURE и BEGIN –
var a,b,f: string;
kir: string;
i,k,j,q:
integer;
это переменные
которые используются данной процедурой.
А переменные Z и kl опишите в разделе Var перед словом implementation.
Это глобальные переменные они будут доступны
не только этой процедуре,
но и другим тоже.
Теперь если введем текст в поле например Привет и введем ключ 2
то наша фраза примет вид (рис 11):

Рис 11. Вид текста после зашифрования.
А теперь запрограммируем кнопку Дешифрование.
kir:=';,.(:)[]*+/-=#^%!?<>@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl
mnopqrstuvwxyz1234567890АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЫЭЮЯабвгдеёжзийклмнопрстуфхцчшщъьыэюя’;
a:=memo1.Text;
q:=length(a);
kl1:=strtoint(edit1.Text);
if kl=kl1 then begin
for k:=1 to q do
for i:=1 to 150 do begin
if a[k]=kir[i] then begin
j:=(i-kl1)mod
150;
b:=b+kir[j];
end;
end;
memo1.Text:=b;
end
else begin
messagedlg('Неправильно введен ключ ! ', mtinformation,[mbok],0);
z:=z+1;
end;
if z=3 then begin
messagedlg('Программа будет закрыта !',mtInformation, [mbOk],0);
form1.Close;
end;
введем переменные между PROCEDURE и BEGIN
var a,b: string;
kir: string;
i,kl1,k,j,q:
integer;
Теперь попробуйте дешифровать нашу фразу.
Теперь перейдем к нашим компонентам OpenDialog и SaveDialog они
нужны для того, чтобы можно было открыть любой текстовый документ и сохранить
его. Запрограммируем нашу кнопку Открыть.
if
opendialog1.Execute then begin
memo1.Lines.LoadFromFile(opendialog1.filename);
end;
Выделим компонент OPENDIALOG найдем свойство FILTER справа от него щелкнем по кнопочке, откроется окно
вида

теперь
напишем то что вы видите у себя.
Т.е мы это делаем для того
чтобы при нажатии кнопки открыть мы смогли открыть текстовые файлы.
Запрограммируем кнопку Сохранить
if savedialog1.Execute then
memo1.Lines.savetoFile(savedialog1.filename);
выделим компонент SAVEDIALOG и пропишем свойство filter. Как это описано выше.
Кнопка Обновить – ее код
memo1.Text:='';
edit1.Text:='';
Самостоятельное задание.
Сделайте так, чтобы была возможность ввода
ключа не только цифрами, но
и буквами.
Система Цезаря с ключевым словом.
Система Цезаря с ключевым словом является одноалфавитной системой подстановки. Выберем некоторое
число К, 0<k<26 и слово в качестве ключевого
слова. Желательно чтобы буквы ключевого слова были различными. Пусть выбрано
слово dipLomat и число=6 ключевое слово записывается под
алфавитом, начиная с буквы, числовой код которой совпадает с выбранным числом
К:
1 2 3 4
5 6
a b c
d e f g h I j k L m n o p q r s t u v w x y z
d i p L oma t
оставшиеся буквы алфавита подстановки
записываются после ключевого слова в алфавитном порядке
a b c
d e f g h I j k L m n o p q r s t u v w x y z
v w x y z d i p L oma t b c e f g h j
k n q r s u
теперь мы имеем подстановку для каждой буквы произвольного
сообщения
исходное сообщение s e n d зашифруется на h z b y
a b c
d e f g h I j k L m n o p q r s t u v w x y z
v w x y z d i p L om a t b c e
f g h j k n q
r s u
составим теперь программу
начните
новый проект и разместите следующие компоненты

код кнопки открыть
if opendiaLog1.Execute then
memo1.Lines.LoadFromFiLe(opendiaLog1.FiLeName);
опишите глобально следующие переменные
kl:integer;
a,b:array[1..26] of char;
код кнопки ключ
randomize;
kL:=random(20);
LabeL2.Caption:=inttostr(kL);
код кнопки шифровать
procedure
TForm1.Button2CLick(Sender: TObject);
var
i,j,dL,g,k,dL1:integer;
i1:char ;
kL_sL,res,txt:string;
begin
k:=0;
g:=kL;
kL_sL:=edit1.text;
j:=1;
for i1:='a' to 'z' do
begin
a[j]:=i1;
inc(j)
end;
dL:=Length(kL_sL);
i:=1;
whiLe i<=dL do
begin
b[kL]:=kL_sL[i];
kL:=kL+1;
i:=i+1;
end;
for i:=1 to 26 do
begin
for j:=1 to dL do
if a[i]=kL_sL[j] then k:=1;
if k=0 then
begin
b[kL]:=a[i];
kL:=kL+1;
end;
if kL=27 then kL:=1;
k:=0;
end;
res:='';
txt:=memo1.text;
dL1:=Length(txt);
for j:=1 to dL1 do
begin
for i:=1 to 26 do
begin
if txt[j]=a[i]
then res:=res+b[i];
end;
end;
LabeL3.Caption:=res;
код кнопки расшифровать
procedure
TForm1.Button4CLick(Sender: TObject);
var res,txt:string;dL,j,i:integer;
begin
txt:=LabeL3.Caption;
dL:=Length(txt);
for i:=1 to dL do
begin
for j:=1 to 26 do
begin
if txt[i]=b[j]
then res:=res+a[j];
end;
end;
LabeL4.Caption:=res;
Теперь откройте любой текстовый файл выберите
ключ введите ключевое слово и зашифруйте сообщение.
Самостоятельное задание:
Сделайте так чтобы использовался и русский
алфавит