• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

DES在C#和DELPHI下的实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
DES在C#下是由des来实现的,需要KEY和IV,其中如果KEY或者IV不足8字节,用#0 来补足 代码如下:
byte[] key = new byte[8];
            
byte[] iv = new byte[8];
            
for (int i = 0;i < 8 ;i ++)
        }


DELPHI下要实现相应的加密和解密,需要自己写DES代码,并加上CBC方式的异或
这里要说明一点,我发现C#下DES明文在加密前,有补足8的倍数的情况,即如果如果是“11111”就会补成“11111#3#3#3”,如果是“11111111”就会“11111111#8#8#8#8#8#8#8#8”,然后在进行异或,最后加密!
演示代码如下:
  Encrypt := true;
  temp :
= edit2.Text;
    res :
= '';
  
for i:=0 to 7 do begin
    
if i > (length(temp)-1) then
      key[i] :
=0
    
else
      key[i] :
= byte(temp[i+1]);
  end;
  temp :
= edit3.Text;
  
for i:=0 to 7 do begin
    
if i > (length(temp)-1) then
      iv[i]:
=0
    
else
      iv[i] :
= byte(temp[i+1]);
  end;
   InitEncryptDES(Key, Context, Encrypt);
    temp :
= edit1.Text;
    len :
= length(temp);

    temp :
= temp+ char8- (len mod 8));

    posnum :
= 0;
    
for i:=0 to len do begin
      poschar:
= temp[i+1];
      Block[posnum] :
= byte(poschar);
      posnum :
= posnum +1;
      
if posnum = 8 then begin
         EncryptDESCBC(Context, IV, Block);
         
for j:= 0 to 7 do begin
           res :
= res +   char(block[j]);
         end;
         iv :
= block;
         posnum :
= 0;
      end;

    end;
    
if  posnum <> 0 then begin
      
for i:=posnum to 7 do begin
         Block[i] :
= byte(poschar);
      end;
      EncryptDESCBC(Context, IV, Block);
         
for j:= 0 to 7 do begin
           res :
= res +   char(block[j]);
         end;
         posnum :
= 0;
    end;
    edit4.Text :
= IdEncoderMIME1.EncodeString(res);

 Encrypt := false;
  temp :
= edit2.Text;
  res :
= '';
  
for i:=0 to 7 do begin
    
if i > (length(temp)-1) then
      key[i] :
=0
    
else
      key[i] :
= byte(temp[i+1]);
  end;
  temp :
= edit3.Text;
  
for i:=0 to 7 do begin
    
if i > (length(temp)-1) then
      iv[i] :
= 0
    
else
      iv[i] :
= byte(temp[i+1]);
  end;
  InitEncryptDES(Key, Context, Encrypt);
   
//for i:=0 to 7 do block[0] := 0;
  temp := IdDecoderMIME1.DecodeString(edit4.Text)     ;
  posnum :
= 0;
  
for i:=0 to length(temp)-1 do begin
    Block[posnum] :
= byte(temp[i+1]);
    posnum :
= posnum+1;
    
if posnum = 8 then begin
       bak :
= block;
       EncryptDESCBC(Context, IV, Block);
       
for j:= 0 to 7 do begin
         
//  temp := temp+inttostr(byte(block[i]))+' ';
           res := res +   char(block[j]);
       end;
       iv :
= bak;
      posnum :
= 0;
    end;
  end;
  
if posnum <> 0 then begin
     showmessage(
'解密出错');
  end 
else begin
   temp:
='';
   
//len := res[length(res)] ;
    for i:= 1 to length(res) do begin
      temp :
= temp+char(res[i]);
    end;
    edit1.Text :
= trim(temp);
   end;

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DELPHI(VCL及FMX[Firemonkey])启动时的欢迎窗口实现代码发布时间:2022-07-18
下一篇:
delphi读写文本文件assignfileresetappend发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap