
- •Федеральное агентство по образованию Московский государственный горный университет отчет
- •Содержание
- •Лабораторная работа №1 Система перестановок. Система магических квадратов.
- •Теоретическая часть
- •Выполнение
- •Лабораторная работа №2 Системы сложных подстановок
- •Теоретическая часть
- •Задание
- •Выполнение
- •Лабораторная работа №3 Стандарт шифрования данных des
- •Теоретическая часть
- •Задание
- •Выполнение
- •Лабораторная работа №4
- •Теоретическая часть
- •Задание
- •Выполнение
- •Приложение 1
- •Приложение 2
- •Приложение 3
- •Приложение 4
Приложение 4
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, math;
type
TForm1 = class(TForm)
Edit_G: TEdit;
Edit_X: TEdit;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
Label4: TLabel;
ComboBox1: TComboBox;
Label5: TLabel;
Edit_K: TEdit;
Label6: TLabel;
Edit_M: TEdit;
Edit_a_b: TEdit;
Button3: TButton;
Edit_mes: TEdit;
Label1: TLabel;
Label7: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
function pr_mass (g,h :integer): boolean;
procedure Button3Click(Sender: TObject);
procedure Edit_Change(Sender: TObject; var knopka: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
simple: array of integer;
G, X, P: integer;
G1, X1, P1: extended;
Y, Y1: integer;
a, a1, b, b1: integer;
K: integer;
M: integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
P := strtoint(combobox1.Text);
G := strtoint(edit_G.Text);
X := strtoint(edit_X.Text);
if (combobox1.Text = '') or (edit_G.Text = '') or (edit_X.Text = '') then
begin
showmessage('Ни одно поле не может быть пустым');
exit;
end;
if (G >= P) or (G = 0) then
begin
showmessage('G должно быть меньше P и больше 0');
edit_G.Text := '0';
exit; end;
if (X >= P) or (X = 0) then
begin
showmessage('X должно быть меньше P и больше 0');
edit_X.Text := '0';
exit; end;
Y1 := round(power(G,X));
Y := Y1 mod P;
K := strtoint(edit_K.Text);
if (K >= (P-1)) or (K < 0) then
begin
showmessage ('K должно быть меньше P-1 и больше 0');
exit; end;
if ((P-1) mod K = 0) then
begin
showmessage('K не является простым по отношению к P-1. Выберете другое K.');
exit; end;
a1 := round(power(G,K));
a := a1 mod P;
M := strtoint(edit_M.text);
b1 := round(power(Y,K)*M);
b := b1 mod P;
edit_a_b.Text := '(' + inttostr(a) + ', ' + inttostr(b) + ')';
button3.Enabled := true;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
r: boolean;
nomer, i: integer;
begin
button3.Enabled := false;
setlength(simple, 1000);
simple[0] := 3;
form1.combobox1.Items[0] := inttostr(simple[0]);
nomer := 1;
for i := 4 to 1024 do
begin
r := pr_mass(i, nomer);
if r = true then
begin
simple[nomer] := i;
form1.ComboBox1.AddItem(inttostr(simple[nomer]),sender);
r := false;
inc(nomer);
end
else continue;
end;end;
function tform1.pr_mass (g,h :integer): boolean;
var
i: integer;
D: boolean;
begin
if g mod 2 = 0 then
begin
pr_mass := false;
exit;
end;
D := true;
for i := 1 to h-1 do
begin
if (g mod simple[i]) = 0 then
begin
D := false;
break; end; end;
if D = false then pr_mass := false
else pr_mass := true;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
qwe: string;
begin
qwe := combobox1.Text;
showmessage(qwe);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
mes: integer;
mes1: extended;
begin
mes1 := power(a,X);
mes := round(b/mes1) mod P;
edit_mes.Text := floattostr(mes);
while mes1 < 1 do
begin
mes1 := mes1*10;
end;
button3.Enabled := false;
end
procedure TForm1.Edit_Change(Sender: TObject; var knopka: Char);
begin
case knopka of
'0'..'9', #8:
else knopka := #0;
end;end;end.