⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.pas

📁 AES加密解密程序(开发语言delphi)
💻 PAS
字号:
unit Test;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, Buttons, Grids, DBGrids;

type
  TTestForm = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Panel4: TPanel;
    Label25: TLabel;
    Label33: TLabel;
    Edit18: TEdit;
    Button6: TButton;
    Panel5: TPanel;
    Label26: TLabel;
    Label34: TLabel;
    Button7: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Label4: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Label5: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label16: TLabel;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    TabSheet6: TTabSheet;
    Panel6: TPanel;
    Label35: TLabel;
    Label6: TLabel;
    Label11: TLabel;
    Button8: TButton;
    Edit6: TEdit;
    Edit13: TEdit;
    Panel11: TPanel;
    Label31: TLabel;
    Label36: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label10: TLabel;
    Label38: TLabel;
    Edit23: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Panel10: TPanel;
    Label30: TLabel;
    Label40: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Edit22: TEdit;
    Button11: TButton;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit14: TEdit;
    Panel9: TPanel;
    Label29: TLabel;
    Label39: TLabel;
    Label9: TLabel;
    Edit20: TEdit;
    Button9: TButton;
    Edit10: TEdit;
    Panel8: TPanel;
    Label41: TLabel;
    Label15: TLabel;
    Button12: TButton;
    Edit15: TEdit;
    Panel1: TPanel;
    Panel2: TPanel;
    Label17: TLabel;
    Label19: TLabel;
    Label21: TLabel;
    Edit16: TEdit;
    Edit19: TEdit;
    Edit24: TEdit;
    Label18: TLabel;
    Label20: TLabel;
    Edit17: TEdit;
    Edit21: TEdit;
    BitBtn3: TBitBtn;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label32: TLabel;
    ll: TMemo;
    Label42: TLabel;
    Label43: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Memo4: TMemo;
    Memo5: TMemo;
    Panel12: TPanel;
    Button13: TButton;
    Memo6: TMemo;
    Label44: TLabel;
    Panel3: TPanel;
    Button14: TButton;
    Memo7: TMemo;
    Label45: TLabel;
    Panel7: TPanel;
    Button10: TButton;
    Memo8: TMemo;
    Label46: TLabel;
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure PageControl1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  TestForm: TTestForm;

implementation
uses aesunit, TestUnit;

{$R *.dfm}

//*************************************************************************************************************
//*************************************************************************************************************



procedure TTestForm.Button6Click(Sender: TObject);
var
  times : integer;
begin
  if PKeyLicence='' then BitBtn3Click(Sender);
  times := StrToInt (Edit18.Text);
  if (times > 100000) then
  begin
    ShowMessage ('对不起,你输入的变化范围超界');
    exit;
  end;
  if  TestUseKeyWord(PKeyLicence, PAllotLicence, Edit2.Text, Edit1.Text, times)
    then Showmessage('在KeyWord的变化测试范围内Key值唯一,Test over!')
    else ShowMessage('在测试范围内Key值不唯一,测试结果在TestKeyWordToKey.txt中!');
end;

procedure TTestForm.Button7Click(Sender: TObject);
var
  times : integer;
begin
  times := StrToInt (Edit5.Text);
  if (times > 100000) then
  begin
    ShowMessage ('对不起,你输入的变化范围超界');
    exit;
  end;
  if TestUseMeterID(PKeyLicence, PAllotLicence, Edit4.Text, Edit3.Text, times)
    then  showMessage ('在MeterID的变化范围内Key值唯一,Test over!')
    else ShowMessage('在MeterID的变化范围内Key值不唯一,测试结果在TestMeterIDToKey.txt文件中!');
end;

procedure TTestForm.Button8Click(Sender: TObject);
begin
  if TestDynamicKeyUseNumber (Edit13.Text, Edit6.Text)
    then showMessage ('售电次数在0--99999范围内变化,Dkey值唯一,Test over!')
    else ShowMessage('售电次数在0--99999范围内变化,Dkey值不唯一,测试结果在TestDynamicKeyUseNumber.txt文件中!');
end;

procedure TTestForm.Button12Click(Sender: TObject);
var
  Beginning, Ending : TDateTime;
  hh : TTimeStamp;
  Between : String;
  Plaintext, Key : string;
  i, l1 : integer;
  F : TextFile;
begin
  //str := TimeToStr (Beginning);
  l1:=StrToInt(Edit15.Text);
  if ((l1=12) or (l1=16) or (l1=20)) then
  begin
//    Memo5.Text := '';
    Plaintext := Edit19.Text;
    Key := Edit21.Text;
    AssignFile (F, 'Time'+Edit15.Text+'.txt');
    Rewrite (F);
    writeln (F, 'Encoding Time is');
    Beginning := Time;
    For i := 1 To 1000 do Between := aes(copy(Plaintext, 1,l1), copy(Key,1,32), 9);
    Ending := Time;
    Beginning := Ending - Beginning;
    hh := DateTimeToTimeStamp (Beginning);
    Between := IntToStr (hh.Time);
    writeln (F, Between + 'ms');
    //showMessage ('加密计算1000次所用时间'+ Between +'   ms');
    Memo5.Lines.Add('');
    Memo5.Lines.add ('加密计算1000次所用时间'+ Between +'   ms');

    writeln (F, 'Decoding Time is');
    Beginning := Time;
    For i := 1 To 1000 do Between := InAES(copy(Plaintext,1,l1), copy(Key,1,32), 9);
    Ending := Time;
    Between := IntToStr (hh.Time);
    Beginning := Ending - Beginning;
    hh := DateTimeToTimeStamp (Beginning);
    Between := IntToStr (hh.Time);
    writeln (F, Between + ' ms per 1000 times');
    //showMessage ('解密计算1000次所用时间' + Between + '   ms');
    Memo5.Lines.add ('解密计算1000次所用时间'+ Between +'   ms');
    //测试加密解密1000次时间
    writeln (F, 'Encoding and Decoding Time is');
    Beginning := Time;
    For i := 1 To 1000 do
    begin
      Between := aes(copy(Plaintext, 1,l1), copy(Key,1,32), 9);
      Between := InAES(copy(Plaintext,1,l1), copy(Key,1,32), 9);
    end;
    Ending := Time;
    Between := IntToStr (hh.Time);
    Beginning := Ending - Beginning;
    hh := DateTimeToTimeStamp (Beginning);
    Between := IntToStr (hh.Time);

    writeln (F, Between + ' ms per 1000 times');
    closeFile (F);
  end;
  //showMessage ('加密解密计算1000次所用时间'+Between+'   ms');
  Memo5.Lines.add ('加密解密计算1000次所用时间'+ Between +'   ms');
  Memo5.Lines.add ('Test over!');

end;

procedure TTestForm.Button9Click(Sender: TObject);
var
  Plaintext : String;
begin
  Plaintext := Edit10.Text;
  if Plaintext = '' then
  begin
    showMessage ('校验部分的明文不能为空');
    exit;
  end;
  If TestHashAndPlaintext (Plaintext, Length (Plaintext), StrToInt(Edit20.Text))
  Then showMessage ('Hash函数对校验部分解密的值唯一,Test over!')
  Else showMessage ('Hash函数对校验部分解密的值不唯一,测试结果在明文长度+TestHash.txt!');
end;

procedure TTestForm.Button13Click(Sender: TObject);
var
  TempPlaintext, TempKey : String;
  F : TextFile;
  s1,s2,s3,s4,s5:string;
begin
  TempPlaintext := Copy (Edit7.Text, 1, StrToInt(Edit9.Text));
  if ( (Length(TempPlaintext) <> 12) And (Length(TempPlaintext) <> 16) And

(Length(TempPlaintext) <> 20)) then
  begin
    showMessage ('明文长度不对');
    exit;
  end;
  TempKey := Copy (Edit8.Text, 1, 32);
  PlaintextAffectEncryption (TempPlaintext, TempKey, 15, StrToInt(Edit23.Text));
  showMessage ('Test over!');
  AssignFile (F, 'Plaintext affect the Encryption'+IntToStr(Length(TempPlaintext))+'.txt');
  Memo6.Lines.Add('');
  Reset (F);
  readln(F,s1,s2,s3,s4,s5);
  Memo6.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  readln(F,s1,s2,s3,s4,s5);
  Memo6.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  while (not Eof(F)) do
  begin
   readln(F,s1,s2,s3,s4,s5);
   Memo6.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  end;
  CloseFile(F);

end;

procedure TTestForm.Button11Click(Sender: TObject);
var
  TempKey, TempPlaintext: String;
  F : TextFile;
  s1,s2,s3,s4,s5:string;
begin
  //TempEncryption := Edit9.Text;
  TempPlaintext := Copy (Edit11.Text, 1, StrToInt(Edit14.Text));
  if ( (Length(TempPlaintext) <> 12) And (Length(TempPlaintext) <> 16) And (Length(TempPlaintext) <> 20)) then
  begin
    showMessage ('明文长度不对');
    exit;
  end;
  TempKey := Copy (Edit12.Text, 1, 32);
  testBestRoundsForDecoding (TempPlaintext, TempKey, 15, StrToInt (Edit22.Text));
  showMessage ('Test over!');
  AssignFile (F, 'Encryption affect Plaintext'+IntToStr(Length(TempPlaintext))+'Decoding'+'.txt');
  Memo3.Lines.Add('');
  Reset (F);
  readln(F,s1,s2,s3,s4,s5);
  Memo3.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  readln(F,s1,s2,s3,s4,s5);
  Memo3.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  while (not Eof(F)) do
  begin
   readln(F,s1,s2,s3,s4,s5);
   Memo3.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  end;
  CloseFile(F);
end;


procedure TTestForm.Button14Click(Sender: TObject);
var
  TempPlaintext, TempKey : String;
  F : TextFile;
  s1,s2,s3,s4,s5 : String;
begin
  TempPlaintext := Copy (Edit7.Text, 1, StrToInt(Edit9.Text));
  if ( (Length(TempPlaintext) <> 12) And (Length(TempPlaintext) <> 16) And
(Length(TempPlaintext) <> 20)) then
  begin
    showMessage ('明文长度不对');
    exit;
  end;
  TempKey := Copy (Edit2.Text, 1, 32);
  KeyAffectEncryption (TempPlaintext, TempKey, 15, StrToInt(Edit23.Text));
  showMessage ('Test over!');

  AssignFile (F, 'Key affect the Encryption'+IntToStr(Length(TempPlaintext))+'.txt');
  Memo7.Lines.Add('');
  Reset (F);
  readln(F,s1,s2,s3,s4,s5);
  Memo7.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  readln(F,s1,s2,s3,s4,s5);
  Memo7.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  while (not Eof(F)) do
  begin
   readln(F,s1,s2,s3,s4,s5);
   Memo7.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  end;
  CloseFile(F);
end;

procedure TTestForm.Button10Click(Sender: TObject);
var
  TempPlaintext, TempKey : String;
  F : TextFile;
  s1,s2,s3,s4,s5 : String;
begin
  TempPlaintext := Copy (Edit7.Text, 1, StrToInt(Edit9.Text));
  if ( (Length(TempPlaintext) <> 12) And (Length(TempPlaintext) <> 16) And (Length(TempPlaintext) <> 20)) then
  begin
    showMessage ('明文长度不对');
    exit;
  end;
  TempKey := Copy (Edit2.Text, 1, 32);
  testBestRounds (TempPlaintext, TempKey, 15, StrToInt(Edit23.Text));
  showMessage ('Test over!');

  AssignFile (F, 'Diffusion Rate of Plaintext'+IntToStr(Length(TempPlaintext))+'.txt');
  Memo8.Lines.Add('');
  Reset (F);
  readln(F,s1,s2,s3,s4,s5);
  Memo8.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  readln(F,s1,s2,s3,s4,s5);
  Memo8.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  while (not Eof(F)) do
  begin
   readln(F,s1,s2,s3,s4,s5);
   Memo8.Lines.add(s1+' '+s2+' '+s3+' '+s4+' '+s5);
  end;
  CloseFile(F);
end;

procedure TTestForm.BitBtn3Click(Sender: TObject);
var
  len : integer;
  Key, HashPlaintext : String;
  l1,l2:integer;
begin
  //Random (StrToInt(copy(Edit17.Text,1,10)));
  PKeyLicence := '';
  PAllotLicence := '';
  for len := 1 To 255 do
  begin
    PKeyLicence := PKeyLicence + IntToStr(Random (10));
  end;
  for len := 1 To 255 do
    PAllotLicence := PAllotLicence + IntToStr(Random(10));

  //这里将分配密钥,并且加密
  Key := KeyDistribution (PKeyLicence, PAllotLicence, Edit16.Text, Edit17.Text);
  Edit6.Text := Key;

  //校验
  l1:=StrToInt(Edit24.Text);
  if l1=12 then
    begin
      l2:=l1-6;
      HashPlaintext := AES(Copy(Edit19.Text,1,6),Copy(Edit19.Text,7,6),2)+copy(Edit19.Text,7,l2);
    end
  else if ((l1=16) or (l1=20)) then
    begin
      l2:=l1-8;
      HashPlaintext:=AES(Copy(Edit19.Text,1,8),Copy(Edit19.Text,9,l2),2)+copy(Edit19.Text,9,l2);
    end;
  if ((l1=12) or (l1=16) or (l1=20)) then
  begin
   Edit11.Text := aes(copy(HashPlaintext, 1,l1), copy(Edit21.Text,1,32), 9); //Rounds(Edit1.Text, 12, Edit3.Text,0);
   //Edit9.Text:=Edit3.Text;
  end;
  //将结果送到不同的文本框中
  Edit10.Text := HashPlaintext;
  Edit2.Text := Edit16.Text;
  Edit4.Text := Edit16.Text;
  Edit13.Text := Edit16.Text;
  Edit1.Text  := Edit17.Text;
  Edit3.Text := Edit17.Text;
  Edit7.Text := Edit19.Text;
  Edit8.Text := Edit21.Text;
  Edit12.Text := Edit21.Text;
  Edit9.Text := Edit24.Text;
  Edit14.Text := Edit24.Text;
  Edit15.Text := Edit24.Text;
end;

procedure TTestForm.PageControl1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  If (PageControl1.ActivePage = TabSheet1) Then
  Begin
    TabSheet1.Highlighted := True;
    TabSheet2.Highlighted := False;
    TabSheet3.Highlighted := False;
    TabSheet4.Highlighted := False;
    TabSheet5.Highlighted := False;
    TabSheet6.Highlighted := False;
  End;
  If (PageControl1.ActivePage = TabSheet2) Then
  Begin
    TabSheet1.Highlighted := False;
    TabSheet2.Highlighted := True;
    TabSheet3.Highlighted := False;
    TabSheet4.Highlighted := False;
    TabSheet5.Highlighted := False;
    TabSheet6.Highlighted := False;
  End;
  If (PageControl1.ActivePage = TabSheet3) Then
  Begin
    TabSheet1.Highlighted := False;
    TabSheet2.Highlighted := False;
    TabSheet3.Highlighted := True;
    TabSheet4.Highlighted := False;
    TabSheet5.Highlighted := False;
    TabSheet6.Highlighted := False;
  End;
  If (PageControl1.ActivePage = TabSheet4) Then
  Begin
    TabSheet1.Highlighted := False;
    TabSheet2.Highlighted := False;
    TabSheet3.Highlighted := False;
    TabSheet4.Highlighted := True;
    TabSheet5.Highlighted := False;
    TabSheet6.Highlighted := False;
  End;
  If (PageControl1.ActivePage = TabSheet5) Then
  Begin
    TabSheet1.Highlighted := False;
    TabSheet2.Highlighted := False;
    TabSheet3.Highlighted := False;
    TabSheet4.Highlighted := False;
    TabSheet5.Highlighted := True;
    TabSheet6.Highlighted := False;
  End;
  If (PageControl1.ActivePage = TabSheet6) Then
  Begin
    TabSheet1.Highlighted := False;
    TabSheet2.Highlighted := False;
    TabSheet3.Highlighted := False;
    TabSheet4.Highlighted := False;
    TabSheet5.Highlighted := False;
    TabSheet6.Highlighted := True;
  End;
end;

procedure TTestForm.FormCreate(Sender: TObject);
begin
  PageControl1.ActivePage := TabSheet1;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -