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

📄 unit1.pas

📁 AES 加密解密示例
💻 PAS
字号:
unit Unit1;

interface

uses
  AES, ElAES,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, ExtCtrls;
  
type
  TfrmMain = class(TForm)
    btnLoad: TButton;
    btnEncrypt: TButton;
    btnDecrypt: TButton;
    mem: TMemo;
    edtKey: TLabeledEdit;
    cboKeyBit: TComboBox;
    Label1: TLabel;
    procedure btnLoadClick(Sender: TObject);
    procedure btnEncryptClick(Sender: TObject);
    procedure cboKeyBitSelect(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnDecryptClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    fsm: TFileStream;
    keybit: TKeyBit;
  public
    { Public declarations }
  end;

const
  // 保存加密前的文件
  SRCFILE = 'C:\aes\src.txt';
  // 保存加密后的文件
  DESTFILE = 'C:\aes\dest.txt';
  
var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.btnLoadClick(Sender: TObject);
begin
  mem.Lines.LoadFromStream(fsm);
end;

procedure TfrmMain.btnEncryptClick(Sender: TObject);
var
  msm: TMemoryStream; 
begin
  if edtKey.Text = '' then
  begin
    edtKey.SetFocus;
    Showmessage('input a key');
    Exit;
  end;

  msm:= TMemoryStream.Create;
  try
    if not AES.EncryptStream(fsm, edtKey.Text, TStream(msm), keybit) then
    begin
      showmessage('encrypt error');
      exit;
    end;

    msm.SaveToFile(DESTFILE);
  finally
    msm.Free;
  end;
end;

procedure TfrmMain.btnDecryptClick(Sender: TObject);
var
  src, dest: TMemoryStream;
begin
  if edtKey.Text = '' then
  begin
    edtKey.SetFocus;
    Showmessage('input key');
    Exit;
  end;

  src:= TMemoryStream.Create;
  dest:= TMemoryStream.Create;
  try
    src.LoadFromFile(DESTFILE);
    if not Aes.DecryptStream(src, edtKey.Text, TStream(dest), keybit) then
    begin
      showmessage('decrypt error');
      exit;
    end;
    mem.Lines.LoadFromStream(dest);
  finally
    src.Free;
    dest.Free;
  end;
end;

procedure TfrmMain.cboKeyBitSelect(Sender: TObject);
begin
  edtKey.MaxLength:= 16 + 8 * cboKeyBit.ItemIndex;
  case cboKeyBit.ItemIndex of
    0: keybit:= kb128;
    1: keybit:= kb192;
    2: keybit:= kb256;
  end;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  if fsm <> nil then
    fsm.Free;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  if not fileExists(SRCFILE) then
  begin
    showmessage('如果是第一次运行示例,请在C盘建立目录“AES”,'
      + '然后在该目录下建立文件“src.txt”,“dest.txt”用于示例。');
    Application.Terminate;
    Exit;
  end;
  
  fsm:= TFileStream.Create(SRCFILE, fmOpenRead);
end;

end.

⌨️ 快捷键说明

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