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

📄 mainunit.pas

📁 采用3des进行加密的源代码
💻 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 + -