📄 fmain.pas
字号:
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 + -