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

📄 unit1.pas

📁 BlowFish算法完整源码与调用方法 ,希望大家喜欢.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    $4ba99586, $ef5562e9, $c72fefd3, $f752f7da, $3f046f69, $77fa0a59, 
    $80e4a915, $87b08601, $9b09e6ad, $3b3ee593, $e990fd5a, $9e34d797, 
    $2cf0b7d9, $022b8b51, $96d5ac3a, $017da67d, $d1cf3ed6, $7c7d2d28, 
    $1f9f25cf, $adf2b89b, $5ad6b472, $5a88f54c, $e029ac71, $e019a5e6, 
    $47b0acfd, $ed93fa9b, $e8d3c48d, $283b57cc, $f8d56629, $79132e28, 
    $785f0191, $ed756055, $f7960e44, $e3d35e8c, $15056dd4, $88f46dba, 
    $03a16125, $0564f0bd, $c3eb9e15, $3c9057a2, $97271aec, $a93a072a, 
    $1b3f6d9b, $1e6321f5, $f59c66fb, $26dcf319, $7533d928, $b155fdf5, 
    $03563482, $8aba3cbb, $28517711, $c20ad9f8, $abcc5167, $ccad925f, 
    $4de81751, $3830dc8e, $379d5862, $9320f991, $ea7a90c2, $fb3e7bce, 
    $5121ce64, $774fbe32, $a8b6e37e, $c3293d46, $48de5369, $6413e680, 
    $a2ae0810, $dd6db224, $69852dfd, $09072166, $b39a460a, $6445c0dd, 
    $586cdecf, $1c20c8ae, $5bbef7dd, $1b588d40, $ccd2017f, $6bb4e3bb, 
    $dda26a7e, $3a59ff45, $3e350a44, $bcb4cdd5, $72eacea8, $fa6484bb, 
    $8d6612ae, $bf3c6f47, $d29be463, $542f5d9e, $aec2771b, $f64e6370, 
    $740e0d8d, $e75b1357, $f8721671, $af537d5d, $4040cb08, $4eb4e2cc, 
    $34d2466a, $0115af84, $e1b00428, $95983a1d, $06b89fb4, $ce6ea048, 
    $6f3f3b82, $3520ab82, $011a1d4b, $277227f8, $611560b1, $e7933fdc, 
    $bb3a792b, $344525bd, $a08839e1, $51ce794b, $2f32c9b7, $a01fbac9, 
    $e01cc87e, $bcc7d1f6, $cf0111c3, $a1e8aac7, $1a908749, $d44fbd9a, 
    $d0dadecb, $d50ada38, $0339c32a, $c6913667, $8df9317c, $e0b12b4f, 
    $f79e59b7, $43f5bb3a, $f2d519ff, $27d9459c, $bf97222c, $15e6fc2a, 
    $0f91fc71, $9b941525, $fae59361, $ceb69ceb, $c2a86459, $12baa8d1, 
    $b6c1075e, $e3056a0c, $10d25065, $cb03a442, $e0ec6e0e, $1698db3b, 
    $4c98a0be, $3278e964, $9f1f9532, $e0d392df, $d3a0342b, $8971f21e, 
    $1b0a7441, $4ba3348c, $c5be7120, $c37632d8, $df359f8d, $9b992f2e, 
    $e60b6f47, $0fe3f11d, $e54cda54, $1edad891, $ce6279cf, $cd3e7e6f, 
    $1618b166, $fd2c1d05, $848fd2c5, $f6fb2299, $f523f357, $a6327623, 
    $93a83531, $56cccd02, $acf08162, $5a75ebb5, $6e163697, $88d273cc, 
    $de966292, $81b949d0, $4c50901b, $71c65614, $e6c6c7bd, $327a140a, 
    $45e1d006, $c3f27b9a, $c9aa53fd, $62a80f00, $bb25bfe2, $35bdd2f6, 
    $71126905, $b2040222, $b6cbcf7c, $cd769c2b, $53113ec0, $1640e3d3, 
    $38abbd60, $2547adf0, $ba38209c, $f746ce76, $77afa1c5, $20756060, 
    $85cbfe4e, $8ae88dd8, $7aaaf9b0, $4cf9aa7e, $1948c25c, $02fb8a8c, 
    $01c36ae4, $d6ebe1f9, $90d4f869, $a65cdea0, $3f09252d, $c208e69f, 
    $b74e6132, $ce77e25b, $578fdfe3, $3ac372e6));

var
  Form1: TForm1;
//实际加密使用的子密钥
  Key_Boxes: array[1..1042] of LongWord;

implementation

{$R *.dfm}

//BlowFish解密函数,入口、出口都是64位 
function BlowFish_DN(PT: int64): int64; 
var 
  i: byte; 
  xL, xR, tmp: LongWord; 
  r: int64; 
begin 
  xL := PT shr $20; 
  xR := PT mod $100000000; 
  xR := xR xor Key_Boxes[17]; 
  xL := xL xor Key_Boxes[18]; 
  for i:=16 downto 1 do 
  begin 
    if i<16 then 
    begin 
      tmp := xR; xR := xL; xL := tmp; 
    end;                        
    xR := BlowFish_Func(xL) xor xR; 
    xL := xL xor Key_Boxes[i]; 
  end; 
  r := xL; 
  r := (r shl $20) or xR; 
  Result := r; 
end; 

//BlowFish加密函数,参数同上 
function BlowFish_EN(PT: int64): int64; 
var 
  i: byte; 
  xL, xR, tmp: LongWord; 
  r: int64; 
begin 
  xL := PT shr $20; 
  xR := PT mod $100000000; 
  for i:=1 to 16 do 
  begin 
    xL := xL xor Key_Boxes[i]; 
    xR := BlowFish_Func(xL) xor xR; 
    if i<16 then 
    begin 
      tmp := xR; xR := xL; xL := tmp; 
    end; 
  end; 
  xR := xR xor Key_Boxes[17]; 
  xL := xL xor Key_Boxes[18]; 
  r := xL; 
  r := (r shl $20) or xR; 
  Result := r; 
end; 

//BlowFish中间的运算函数,入口、出口参数都是32位 
function BlowFish_Func(PT: LongWord): LongWord; 
var 
  a, b, c, d: byte; 
begin 
  a := (PT and $FF000000) shr $18; 
  b := (PT and $00FF0000) shr $10; 
  c := (PT and $0000FF00) shr $8; 
  d := (PT and $000000FF); 

  Result := (((Key_Boxes[a+19] + Key_Boxes[b+19+256]) mod 4294967296) xor Key_Boxes[c+19+512] + Key_Boxes[d+19+768]) mod 4294967296; 
end; 

//BlowFish的初始化,得到子密钥,放在Key_Boxes中 
procedure BlowFish_Init(Key: string);
var 
  i, j, k: integer; 
  tmp: LongWord; 
  PT: int64; 
begin 
  FillChar(Key_Boxes, SizeOf(Key_Boxes), 0); 

//变换填充P盒 
  j := 1; 
  for i:=1 to 18 do 
  begin 
    tmp := 0; 
    for k:=0 to 3 do 
    begin 
      tmp := (tmp shl 8) or Ord(Key[j]); 
      inc(j); 
      if j>Length(Key) then 
        j := 1; 
    end; 
    Key_Boxes[i] := pBox[i] xor tmp; 
  end; 

//填充S盒 
  for i:=0 to 3 do 
  for j:=0 to 255 do 
    Key_Boxes[i*256+j+19] := sBox[i+1, j+1]; 

//开始连续填充 
  PT := 0; 
  for i:=1 to 521 do 
  begin 
    PT := BlowFish_EN(PT); 
    Key_Boxes[i*2-1] := PT shr $20; 
    Key_Boxes[i*2] := PT mod $100000000; 
  end; 
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
  b:Int64;
  S:String;
  Str:String;
begin
  b:=0;
  S:=Edit1.Text;
  for i:=1 to Length(Edit1.Text) do
    b:=b+ord(S[i])*10;
  BlowFish_Init('ksaiy');
  BlowFish_EN(B);
  if Edit2.Text =IntToHex(BlowFish_EN(b),0) then
    ShowMessage('注册成功!')
  else
    ShowMessage('注册失败!');
///////////////////////////////////////////////////////////////////////////////
                         //Des DEMO V1.0//
                          //作者:ksaiy//
//欢迎使用由ksaiy制作的DES加密算法演示程序,此算法为标准的DES算法,你可以根据的
//的自己需要进行变形。具体怎么操作可以登录我们的网站查询详细的资料。我们专门为软
//件开发者提供软件加密安全测试服务和软件加密解决方案,具体的可以参看我们的网站上
//的资料。我们的网站:http://www.ksaiy.com  http://www.magicoa.com
//技术支持:ksaiy@sina.com 在线QQ:40188696 UC:934155
                            //End //

                  //注意:转载请保留以上信息。//                            
///////////////////////////////////////////////////////////////////////////////
end;

end.

⌨️ 快捷键说明

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