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

📄 fmain.pas

📁 CryptoKit使用简便的加密解密控件。(源代码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit fmain;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ToolWin, AppEvnts, ExtCtrls,
  ASCryptos, ASCryptoComp, ASGtMath, ASUtils;

type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    Pages1: TPageControl;
    tabSym: TTabSheet;
    GroupAlgo: TGroupBox;
    rbDES: TRadioButton;
    GroupSymKey: TGroupBox;
    EditSymKey: TEdit;
    btUpdSymKey: TButton;
    rbSymKeyHex: TRadioButton;
    rbSymKeyStr: TRadioButton;
    GroupSymData: TGroupBox;
    EditSym1: TEdit;
    EditSym2: TEdit;
    EditSym3: TEdit;
    btEncryptSym: TButton;
    btDecryptSym: TButton;
    rbSymDataHex: TRadioButton;
    rbSymDataStr: TRadioButton;
    TabSheet3: TTabSheet;
    MemoLog: TMemo;
    GroupCM: TGroupBox;
    rbECB: TRadioButton;
    rbCBC: TRadioButton;
    rbCFB: TRadioButton;
    rbOFB: TRadioButton;
    rbRC2: TRadioButton;
    rbRC4: TRadioButton;
    rbRC5: TRadioButton;
    rbBF: TRadioButton;
    rbCast: TRadioButton;
    rbIDEA: TRadioButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    AS_PrimeGenerator1: TAS_PrimeGenerator;
    AS_RandomGenerator1: TAS_RandomGenerator;
    btSaveSymKey: TButton;
    btGenSymKey: TButton;
    btLoadSymKey: TButton;
    LabelSymKey: TLabel;
    EditSymKeyLen: TEdit;
    Label5: TLabel;
    OpenDialog1: TOpenDialog;
    LabelSymKeyLim: TLabel;
    TabSheet2: TTabSheet;
    MDX1: TAS_DigestMDX;
    SHA1: TAS_DigestSHA1;
    GroupBox1: TGroupBox;
    rbMD2: TRadioButton;
    rbMD4: TRadioButton;
    rbMD5: TRadioButton;
    rbSHA1: TRadioButton;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    Label8: TLabel;
    EditDgData: TEdit;
    EditDigest: TEdit;
    btDigest: TButton;
    rbDgDataHex: TRadioButton;
    rbDgDataStr: TRadioButton;
    ToolBar1: TToolBar;
    tbEncryptSymFile: TToolButton;
    tbDecryptSymFile: TToolButton;
    ToolBar2: TToolBar;
    tbClearLog: TToolButton;
    ToolBar3: TToolBar;
    tbFileDigest: TToolButton;
    SHA1forRSA: TAS_DigestSHA1;
    Rip1: TAS_DigestRIPEMD160;
    rbRipEmd: TRadioButton;
    DES1: TAS_DESCryptography;
    RC21: TAS_RC2Cryptography;
    RC41: TAS_RC4Cryptography;
    RC51: TAS_RC5Cryptography;
    Blowfish1: TAS_BFCryptography;
    CAST1: TAS_CASTCryptography;
    IDEA1: TAS_IDEACryptography;
    RSA1: TAS_RSACryptography;
    TabSheet4: TTabSheet;
    ToolBar4: TToolBar;
    tbEncodeFile: TToolButton;
    tbDecodeFile: TToolButton;
    Base641: TAS_Base64Coding;
    GroupBox3: TGroupBox;
    rbBase64: TRadioButton;
    GroupBox4: TGroupBox;
    Label9: TLabel;
    Label10: TLabel;
    EditCodeSource: TEdit;
    EditEncoded: TEdit;
    btEncode: TButton;
    EditDecoded: TEdit;
    Label11: TLabel;
    btDecode: TButton;
    MDXforRSA: TAS_DigestMDX;
    tabRSA: TTabSheet;
    GroupRsaKey: TGroupBox;
    Label13: TLabel;
    Label14: TLabel;
    LabelRsaKeyLim: TLabel;
    EditRsaKeyN: TEdit;
    btUpdRsaKey: TButton;
    btSaveRsaKey: TButton;
    btGenRsaKey: TButton;
    btLoadRsaKey: TButton;
    EditRsaKeyLen: TEdit;
    GroupRsaData: TGroupBox;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    EditRsa1: TEdit;
    EditRsa2: TEdit;
    EditRsa3: TEdit;
    btEncryptRsa: TButton;
    btDecryptRsa: TButton;
    rbRsaDataHex: TRadioButton;
    rbRsaDataStr: TRadioButton;
    GroupScheme: TGroupBox;
    rbPkcs: TRadioButton;
    rbOaep: TRadioButton;
    ToolBar5: TToolBar;
    tbEncryptRsaFile: TToolButton;
    tbDecryptRsaFile: TToolButton;
    ToolButton3: TToolButton;
    tbSignFile: TToolButton;
    tbVerifyFile: TToolButton;
    ToolButton6: TToolButton;
    tbTestRsaKey: TToolButton;
    PanelIV: TPanel;
    EditIV: TEdit;
    LabelIV: TLabel;
    rbIVHex: TRadioButton;
    rbIVStr: TRadioButton;
    Label16: TLabel;
    Label17: TLabel;
    EditRsaKeyE: TEdit;
    EditRsaKeyD: TEdit;
    PanelShemeDigest: TPanel;
    cbRsaDigest: TComboBox;
    LabelRsaDigest: TLabel;
    PanelSymKeyOpt: TPanel;
    EditSymKeyOpt: TEdit;
    LabelSymKeyOpt: TLabel;
    Panel1: TPanel;
    Label6: TLabel;
    cbSmallPub: TComboBox;
    procedure btUpdSymKeyClick(Sender: TObject);
    procedure rbSymKeyHexClick(Sender: TObject);
    procedure rbSymKeyStrClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure rbDESClick(Sender: TObject);
    procedure btEncryptSymClick(Sender: TObject);
    procedure btDecryptSymClick(Sender: TObject);
    procedure rbSymDataHexClick(Sender: TObject);
    procedure rbSymDataStrClick(Sender: TObject);
    procedure tbClearLogClick(Sender: TObject);
    procedure CryptAfterDecrypt(Sender: TObject);
    procedure CryptAfterDecryptBlock(Sender: TObject; Block: Pointer; Offset, Size: Cardinal);
    procedure CryptAfterEncrypt(Sender: TObject);
    procedure CryptAfterEncryptBlock(Sender: TObject; Block: Pointer; Offset, Size: Cardinal);
    procedure CryptAfterGenKeys(Sender: TObject);
    procedure CryptAfterLoadKeys(Sender: TObject);
    procedure CryptAfterSaveKeys(Sender: TObject);
    procedure CryptBeforeDecrypt(Sender: TObject);
    procedure CryptBeforeDecryptBlock(Sender: TObject; Block: Pointer; Offset, Size: Cardinal);
    procedure CryptBeforeEncrypt(Sender: TObject);
    procedure CryptBeforeEncryptBlock(Sender: TObject; Block: Pointer; Offset, Size: Cardinal);
    procedure CryptBeforeGenKeys(Sender: TObject);
    procedure CryptBeforeLoadKeys(Sender: TObject);
    procedure CryptBeforeSaveKeys(Sender: TObject);
    procedure SymmChangeInitVector(Sender: TObject);
    procedure SymmChangeKey(Sender: TObject);
    procedure SymmPostValidateKey(Sender: TObject; Key: Pointer;
      KeyByteLen: Integer; var KeyValid: Boolean);
    procedure rbECBClick(Sender: TObject);
    procedure rbCBCClick(Sender: TObject);
    procedure rbCFBClick(Sender: TObject);
    procedure rbOFBClick(Sender: TObject);
    procedure rbRC2Click(Sender: TObject);
    procedure rbRC4Click(Sender: TObject);
    procedure rbRC5Click(Sender: TObject);
    procedure rbBFClick(Sender: TObject);
    procedure rbCastClick(Sender: TObject);
    procedure rbIdeaClick(Sender: TObject);
    procedure AS_PrimeGenerator1TryRandomPrime(Sender: TObject;
      prime: GiantInt);
//  procedure rbRSAClick(Sender: TObject);
    procedure btGenSymKeyClick(Sender: TObject);
    procedure btLoadSymKeyClick(Sender: TObject);
    procedure btSaveSymKeyClick(Sender: TObject);
    procedure AS_PrimeGenerator1AfterGenPrime(Sender: TObject;
      prime: GiantInt);
    procedure RSA1ChangeKeyD(Sender: TObject);
    procedure RSA1ChangeKeyE(Sender: TObject);
    procedure RSA1ChangeKeyN(Sender: TObject);
    procedure EditSymKeyKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EditSymKeyOptKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormDestroy(Sender: TObject);
    procedure rbMD2Click(Sender: TObject);
    procedure rbMD4Click(Sender: TObject);
    procedure rbMD5Click(Sender: TObject);
    procedure rbSHA1Click(Sender: TObject);
    procedure btDigestClick(Sender: TObject);
    procedure rbDgDataHexClick(Sender: TObject);
    procedure rbDgDataStrClick(Sender: TObject);
    procedure AfterCalcDigest(Sender: TObject);
    procedure BeforeCalcDigest(Sender: TObject);
    procedure tbEncryptSymFileClick(Sender: TObject);
    procedure tbDecryptSymFileClick(Sender: TObject);
    procedure tbDigestFileClick(Sender: TObject);
    procedure RSA1AfterSign(Sender: TObject; Data: Pointer;
      DataSize: Cardinal);
    procedure RSA1AfterVerify(Sender: TObject; Data: Pointer;
      DataSize: Cardinal; SignData: Pointer; SignSize: Cardinal);
    procedure RSA1BeforeSign(Sender: TObject; Data: Pointer;
      DataSize: Cardinal);
    procedure RSA1BeforeVerify(Sender: TObject; Data: Pointer;
      DataSize: Cardinal; SignData: Pointer; SignSize: Cardinal);
    procedure rbRipEmdClick(Sender: TObject);
    procedure tbEncodeFileClick(Sender: TObject);
    procedure btEncodeClick(Sender: TObject);
    procedure btDecodeClick(Sender: TObject);
    procedure Base641AfterDecode(Sender: TObject);
    procedure Base641AfterEncode(Sender: TObject);
    procedure Base641BeforeDecode(Sender: TObject);
    procedure Base641BeforeEncode(Sender: TObject);
    procedure tbDecodeFileClick(Sender: TObject);
    procedure EditRsaKeyKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btUpdRsaKeyClick(Sender: TObject);
    procedure btGenRsaKeyClick(Sender: TObject);
    procedure btLoadRsaKeyClick(Sender: TObject);
    procedure btSaveRsaKeyClick(Sender: TObject);
    procedure rbOaepClick(Sender: TObject);
    procedure rbPkcsClick(Sender: TObject);
    procedure btEncryptRsaClick(Sender: TObject);
    procedure btDecryptRsaClick(Sender: TObject);
    procedure tbSignFileClick(Sender: TObject);
    procedure tbVerifyFileClick(Sender: TObject);
    procedure tbTestRsaKeyClick(Sender: TObject);
    procedure tbEncryptRsaFileClick(Sender: TObject);
    procedure tbDecryptRsaFileClick(Sender: TObject);
    procedure rbRsaDataHexClick(Sender: TObject);
    procedure rbRsaDataStrClick(Sender: TObject);
    procedure rbIVHexClick(Sender: TObject);
    procedure rbIVStrClick(Sender: TObject);
    procedure cbRsaDigestClick(Sender: TObject);
    procedure AS_RandomGenerator1AfterGenRandom(Sender: TObject;  rnd: GiantInt);
  private
    FSelCrypto: TAS_SymmCryptography;
    FTempData: array of Byte;
    FStartMoment: TDateTime;
    procedure SetStatus(Index: Integer; const Value: string);
    procedure RefreshSymKey;
    procedure RefreshRsaKey;
    function  HexStrToBuffer(const S: string; var blen: DWord): Pointer;
  public
    property  Status[Index: Integer]: string write SetStatus;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  rbDESClick(nil);
  rbECBClick(nil);
  rbSymKeyHexClick(nil);
  rbPkcsClick(nil);
  cbSmallPub.ItemIndex := 0;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FTempData := nil;
end;

procedure TForm1.SetStatus(Index: Integer; const Value: string);
begin
  StatusBar1.Panels[Index].Text := Value;
end;

function TForm1.HexStrToBuffer(const S: string; var blen: DWord): Pointer;
begin
  blen := HexStrNeedBytes(S);
  SetLength(FTempData, blen);
  HexStrToBytes(S, @FTempData[0], False);
  Result := @FTempData[0];
end;

// editing keys

procedure TForm1.RefreshSymKey;
begin
  if rbSymKeyHex.Checked then rbSymKeyHexClick(nil) else rbSymKeyStrClick(nil);
  if rbIVHex.Checked     then rbIVHexClick(nil)     else rbIVStrClick(nil);
end;

procedure TForm1.RefreshRsaKey;
begin
  EditRsaKeyN.Text := Rsa1.KeyNHexStr;
  EditRsaKeyD.Text := Rsa1.KeyDHexStr;
  EditRsaKeyE.Text := Rsa1.KeyEHexStr;
end;

procedure TForm1.btUpdSymKeyClick(Sender: TObject);
begin
  btUpdSymKey.Enabled := False;

  if rbDES.Checked then begin if EditSymKeyOpt.Text <> '' then DES1.CipherMask    := StrToInt(EditSymKeyOpt.Text); end else
  if rbRC2.Checked then begin if EditSymKeyOpt.Text <> '' then RC21.EffectiveBits := StrToInt(EditSymKeyOpt.Text); end else
  if rbRC5.Checked then begin if EditSymKeyOpt.Text <> '' then RC51.NumRounds     := StrToInt(EditSymKeyOpt.Text); end ;

  try
    if rbSymKeyHex.Checked then
      TAS_SymmCryptography(FSelCrypto).KeyHexStr := EditSymKey.Text else
      TAS_SymmCryptography(FSelCrypto).KeyText   := EditSymKey.Text;

    if rbIVHex.Checked then
      TAS_SymmCryptography(FSelCrypto).InitVectorHexStr := EditSymKey.Text else
      TAS_SymmCryptography(FSelCrypto).InitVectorText   := EditSymKey.Text;

    Status[0] := '';
  except
    on E: Exception do begin
      Status[0] := E.Message;
      RefreshSymKey;
      raise;
    end;
  end;
end;

procedure TForm1.btUpdRsaKeyClick(Sender: TObject);
begin
  btUpdRsaKey.Enabled := False;
  try
    Rsa1.KeyNHexStr := EditRsaKeyN.Text;
    Rsa1.KeyDHexStr := EditRsaKeyD.Text;
    Rsa1.KeyEHexStr := EditRsaKeyE.Text;
    Status[0] := '';
  except
    on E: Exception do begin
      Status[0] := E.Message;
      RefreshRsaKey;
      raise;
    end;
  end;
end;

procedure TForm1.btGenSymKeyClick(Sender: TObject);
begin
  FSelCrypto.GenerateKeys(StrToInt(EditSymKeyLen.Text));
  EditSymKeyLen.Text := IntToStr(FSelCrypto.KeyNumBits div 8);
  RefreshSymKey;
end;

procedure TForm1.btGenRsaKeyClick(Sender: TObject);
begin
  try
    RSA1.SmallPublicExp := StrToInt(cbSmallPub.Text);
  except
    RSA1.SmallPublicExp := 0;
    cbSmallPub.Text := '0';
  end;
  Screen.Cursor := crHourGlass;
  FStartMoment := Now;
  RSA1.GenerateKeys(StrToInt(EditRsaKeyLen.Text));
  EditRsaKeyLen.Text := IntToStr(RSA1.KeyNumBits div 8);
  RefreshRsaKey;
  Screen.Cursor := crDefault;
  Status[0] := Format('Generating RSA key done.  (%f sec elapsed)', [(Now - FStartMoment) * 24 * 3600]);
end;

procedure TForm1.btLoadSymKeyClick(Sender: TObject);
var s, sext: string;
begin
  OpenDialog1.FileName := '';
  s := Copy(FSelCrypto.Name, 1, Length(FSelCrypto.Name)-1);
  sext := 'key' + Lowercase(Copy(s, 1, 3));
  OpenDialog1.DefaultExt := sext;
  OpenDialog1.Filter := Format('%s keys (*.%s)|*.%1:s', [s, sext]);
  if OpenDialog1.Execute then begin
    FSelCrypto.LoadKeysFromFile(OpenDialog1.FileName);
    RefreshSymKey;
    rbSymKeyHex.Checked := True;
  end;
end;

⌨️ 快捷键说明

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