
- •Федеральное агентство по образованию Московский государственный горный университет отчет
- •Содержание
- •Лабораторная работа №1 Система перестановок. Система магических квадратов.
- •Теоретическая часть
- •Выполнение
- •Лабораторная работа №2 Системы сложных подстановок
- •Теоретическая часть
- •Задание
- •Выполнение
- •Лабораторная работа №3 Стандарт шифрования данных des
- •Теоретическая часть
- •Задание
- •Выполнение
- •Лабораторная работа №4
- •Теоретическая часть
- •Задание
- •Выполнение
- •Приложение 1
- •Приложение 2
- •Приложение 3
- •Приложение 4
Приложение 1
Система перестановок
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus;
type
TForm1 = class(TForm)
real_str: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button2: TButton;
smeshch: TEdit;
Label4: TLabel;
Memo1: TMemo;
decr_str: TEdit;
procedure Button1Click(Sender: TObject);
procedure smeshchChange(Sender: TObject; var knopka: Char);
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dlina: integer;
implementation
{$R *.dfm}
procedur TForm1.Button1Click(Sender: TObject); //telo procedury
var //obъyavlenie peremennyh
stroka: string;
massiv: array of integer;
i: integer;
begin
memo1.lines.Clear; //ochistka polya dlya zashifrovannoi stroki
stroka := real_str.text; //poluchenie real'noi sroki
dlina := length(stroka); //uznati dlinu stroki i zapisat' v dlina
setlength(stroka, dlina+1); //zadat' dlinu
setlength(massiv, dlina+1);
if real_str.text = '' then //proverka na pustotu polya. esli pusto, to soobshenie, focus na obъekte i vihod iz procedury
begin
ShowMessage('Введите шифруемую строку');
real_str.SetFocus;
exit; end;
if smeshch.text = '' then // to zhe samoe
begin
button2.Enabled := false;
ShowMessage('Введите смещение');
smeshch.SetFocus;
exit; end;
if StrToInt(smeshch.text) > 256 then //potomu chto vsego byvaet 256 ASCII simvolov
begin
button2.Enabled := false;
showmessage('Смещение не может быть больше 256');
smeshch.text := '0';
smeshch.SetFocus;
end
else begin
for i := 1 to dlina do
begin
massiv[i] := ord(stroka[i]) + StrToInt(smeshch.text);
if massiv[i] > 255 then
massiv[i] := massiv[i] mod 256 // ostatok ot deleniya na 256
end; end;
for i := 1 to dlina do
begin
memo1.Lines[0] := memo1.Lines[0] + chr(massiv[i]);
end;
button2.Enabled := true;
button2.SetFocus;
decr_str.Text := '';
end;
procedure TForm1.smeshchChange(Sender: TObject; var knopka: Char); //telo pocedury. zapreshaet vvod lyubyj simvolov, krome 0-9
begin
case knopka of
'0'..'9', #8:
else knopka := #0;
end;end;
procedure TForm1.Button2Click(Sender: TObject);
var
decr_sym: char;
i: integer;
begin
button2.Enabled := false;
decr_str.Text := '';
for i := 1 to dlina do
begin
if (ord(memo1.Lines[0][i]) - StrToInt(smeshch.text)) >= 0 then
begin
decr_sym := chr(ord(memo1.Lines[0][i]) - StrToInt(smeshch.text));
decr_str.Text := decr_str.Text + decr_sym;
end
else begin
decr_sym := chr(256 - (StrToInt(smeshch.Text) - ord(memo1.Lines[0][i])));
decr_str.Text := decr_str.Text + decr_sym;
end; end;end;
procedure TForm1.FormActivate(Sender: TObject);
begin
button2.Enabled := false;
real_str.SetFocus;
end;end.
Система магических квадратов
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
pocedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
str_1, str_2: string;
magic: array of integer;
begin
setlength(magic, 17);
magic[1] := 16;
magic[2] := 3;
magic[3] := 2;
magic[4] := 13;
magic[5] := 5;
magic[6] := 10;
magic[7] := 11;
magic[8] := 8;
magic[9] := 9;
magic[10] := 6;
magic[11] := 7;
magic[12] := 12;
magic[13] := 4;
magic[14] := 15;
magic[15] := 14;
magic[16] := 1;
for i := 1 to 4 do
begin
form1.Canvas.moveto(i*64, 0); // задаёт точку начала рисования
form1.Canvas.LineTo(i*64, clientwidth); // рисует линию
form1.canvas.moveto(0, i*64);
form1.canvas.lineto(clientheight, i*64)
canvas.Font.Size := 16;
canvas.TextOut((i-1)*64 + 20, 20, inttostr(magic[i])); // рисует текст
inc(j); end;
for i := 1 to 4 do
begin
canvas.TextOut((i-1)*64 + 20, 84, inttostr(magic[i + 4]));
end;
for i := 1 to 4 do
begin
canvas.TextOut((i-1)*64 + 20, 148, inttostr(magic[i + 8]));
end;
for i := 1 to 4 do
begin
canvas.TextOut((i-1)*64 + 20, 212, inttostr(magic[i + 12]));
end;
setlength(str_1, 17);
setlength(str_2, 17);
j := length(edit1.Text);
if j > 16 then
begin
showmessage('Текст не может быть больше 16 символов');
exit; end;
for i := 1 to j do
begin
str_1[i] := edit1.Text[i];
end;
for i := j + 1 to 16 do
begin
str_1[i] := '.';
end;
str_2[1] := str_1[16];
str_2[2] := str_1[3];
str_2[3] := str_1[2];
str_2[4] := str_1[13];
str_2[5] := str_1[5];
str_2[6] := str_1[10];
str_2[7] := str_1[11];
str_2[8] := str_1[8];
str_2[9] := str_1[9];
str_2[10] := str_1[6];
str_2[11] := str_1[7];
str_2[12] := str_1[12];
str_2[13] := str_1[4];
str_2[14] := str_1[15];
str_2[15] := str_1[14];
str_2[16] := str_1[1];
edit2.Text := str_2;
canvas.Font.Size := 10;
for i := 1 to 4 do
begin
canvas.TextOut((i-1)*64 + 50, 40, str_2[i]);
end;
for i := 1 to 4 do
begin
canvas.TextOut((i-1)*64 + 50, 104, str_2[i + 4]);
end;
for i := 1 to 4 do
begin
canvas.TextOut((i-1)*64 + 50, 168, str_2[i + 8]);
end;
for i := 1 to 4 do
begin
canvas.TextOut((i-1)*64 + 50, 232, str_2[i + 12]);
end;end;end.