📄 mainunit.pas
字号:
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,WNDES,StrUtils,Math ;
type
TForm1 = class(TForm)
grp1: TGroupBox;
lbl1: TLabel;
edt1: TEdit;
edt2: TEdit;
edt3: TEdit;
lbl2: TLabel;
lbl3: TLabel;
chkUse3: TCheckBox;
btn1: TButton;
btn2: TButton;
lbl4: TLabel;
mmo1: TMemo;
lbl5: TLabel;
mmo2: TMemo;
mmo3: TMemo;
lbl6: TLabel;
btn3: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ThriceEncryptDes(EnStr:PChar;Key1:PChar;Key2:PChar;Key3:PChar;DeStr:PChar);
procedure ThriceDecryptDes(DeStr:PChar;Key1:PChar;Key2:PChar;Key3:PChar;EnStr:PChar);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//功能:3des加密函数,使用三个密钥在DES算法中跌代加减密;
//KEY1,KEY2,KEY3为密钥
//EnStr为加密的原文;
//DeStr为加密之后的密文。
// 在为DeStr 分配内存空间时必须分配原文长度8倍+1的长度空间,如果原文的长度不是8
//的倍数,则必须转换成8的倍数,后再分配空间,例如:原文长度是110,这个不是8的倍数,
//所以必须是转换成8的倍数112后再分配空间,也就是112* 8+1,而不是110*8+1;
//原因是Des16进制加密后会密文是8的倍数而且是原文的2倍长,经过3次加密后就是原来的
//8倍长了。
procedure TForm1.ThriceEncryptDes(EnStr:PChar;Key1:PChar;Key2:PChar;Key3:PChar;DeStr:PChar);
var
Str1:String;
Str2:String;
n:Integer;
begin
Str1:=EncryStrHex( EnStr,Key1) ;
Str2:=EncryStrHex( Str1,Key2) ;
Str1:=EncryStrHex( Str2,Key3) ;
n:=Length(Str1);
CopyMemory(DeStr, PChar(Str1),n+1);
end;
//功能:3des解密函数,使用三个密钥在DES算法中跌代加减密;
//KEY1,KEY2,KEY3为密钥
//EnStr为解密后的字符串
//DeStr为需要解密的密文。
//EnStr的空间分配必须是密文长度的1/8 +1
procedure TForm1.ThriceDecryptDes(DeStr:PChar;Key1:PChar;Key2:PChar;Key3:PChar;EnStr:PChar); //3DES解密函数
var
Str1:String;
Str2:String;
n:Integer;
begin
Str1:=DESryStrHex( DeStr,Key3) ;
Str2:=DESryStrHex( Str1,Key2) ;
Str1:=DESryStrHex( Str2,Key1) ;
n:=Length(Str1);
CopyMemory(EnStr, PChar(Str1),n+1 );
end ;
{
//功能:3des加密函数,使用三个密钥在DES算法中跌代加减密;
//KEY1,KEY2,KEY3为密钥,密钥的长度为8;
//EnStr为加密的原文;
//DeStr为加密之后的密文。
//len为EnStr的长度,必须要为8的倍数。
//为了确保解密的正确性,在得到的密文结果,必须要将其长度与原始密钥的长度等长。
Function TForm1.D3DesEn(EnStr:PChar;Key1:PChar;Key2:PChar;Key3:PChar;DeStr:PChar;Len:Integer):Integer;
var
Str1:String;
Str2:String;
n:Integer;
begin
WsWriteLog_String('txt.txt','D3DesEn:'+EnStr,False);
Str1:=EncryStr( EnStr,Key1) ;
WsWriteLog_String('txt.txt','Key1:'+Str1,False);
Str2:=EncryStr( Str1,Key2) ;
WsWriteLog_String('txt.txt','Key2:'+Str2,False);
Str1:=EncryStr( Str2,Key3) ;
WsWriteLog_String('txt.txt','Key3:'+Str1,False);
n:=Length(Str1);
CopyMemory(DeStr, PChar(Str1),n+1);
WsWriteLog_String('txt.txt','DeStr:'+DeStr,False);
Result:=0;
end;
//功能:3des解密函数,使用三个密钥在DES算法中跌代加减密;
//KEY1,KEY2,KEY3为密钥,密钥的长度为8;
//EnStr为加密的原文;
//DeStr为加密之后的密文。
//len为EnStr的长度,必须要为8的倍数。
function TForm1.D3DesDe(DeStr:PChar;Key1:PChar;Key2:PChar;Key3:PChar;EnStr:PChar;Len:Integer):Integer; //3DES解密函数
var
Str1:String;
Str2:String;
n:Integer;
begin
Str1:=DESryStr( DeStr,Key3) ;
n:=Length(Str1);
//ShowMessage(IntToStr(n));
Str2:=DESryStr( Str1,Key2) ;
n:=Length(Str2);
//ShowMessage(IntToStr(n));
Str1:=DESryStr( Str2,Key1) ;
n:=Length(Str1);
//ShowMessage(IntToStr(n));
CopyMemory(EnStr, PChar(Str1),n+1 );
Result:=0;
end ;
}
procedure TForm1.btn1Click(Sender: TObject);
var
DeStr:PChar;
Key1:PChar;
Key2:PChar;
Key3:PChar;
nLen:Integer;
EnStr:PChar;
begin
nLen:=Length(mmo1.Text) ;
GetMem(EnStr,nLen+1);
if nLen mod 8 <>0 then
nLen:= nLen+(8-nLen mod 8);
if chkUse3.Checked then
GetMem(DeStr,nLen*8+1)
else
GetMem(DeStr,nLen*2+1);
GetMem(Key1,Length(edt1.Text)+1);
GetMem(Key2,Length(edt2.Text)+1);
GetMem(Key3,Length(edt3.Text)+1);
try
StrPCopy(EnStr,mmo1.Text);
StrPCopy(Key1,edt1.Text);
StrPCopy(Key2,edt2.Text);
StrPCopy(Key3,edt3.Text);
if chkUse3.Checked then
ThriceEncryptDes(EnStr,Key1,Key2,Key3,DeStr)
else
StrPCopy(DeStr,EncryStrHex( EnStr,Key1)) ;
mmo2.Text:='';
mmo2.Text:=DeStr ;
finally
FreeMem(EnStr);
FreeMem(DeStr);
FreeMem(Key1);
FreeMem(Key2);
FreeMem(Key3);
end;
end;
procedure TForm1.btn2Click(Sender: TObject);
var
DeStr:PChar;
Key1:PChar;
Key2:PChar;
Key3:PChar;
EnStr:PChar;
nLen:Integer;
begin
GetMem(DeStr,Length(mmo2.Text)+1);
nLen:= Length(mmo2.Text);
if chkUse3.Checked then
GetMem(EnStr,nLen div 8+1)
else
GetMem(EnStr,nLen div 2+1);
GetMem(Key1,Length(edt1.Text)+1);
GetMem(Key2,Length(edt2.Text)+1);
GetMem(Key3,Length(edt3.Text)+1);
try
StrPCopy(DeStr,mmo2.Text);
StrPCopy(Key1,edt1.Text);
StrPCopy(Key2,edt2.Text);
StrPCopy(Key3,edt3.Text);
if chkUse3.Checked then
ThriceDecryptDes( DeStr,Key1,Key2,Key3,EnStr )
else
StrPCopy(EnStr,DESryStrHex( DeStr,Key1)) ;
mmo3.Text:='';
mmo3.Text:=EnStr ;
finally
FreeMem(DeStr);
FreeMem(EnStr);
FreeMem(Key1);
FreeMem(Key2);
FreeMem(Key3);
end;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
mmo1.Text:='';
mmo2.Text:='';
mmo3.Text:='';
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -