3DES加密算法  网上说是3次DES加密  但是算出结果不对 请贴出算法示例(16进制编码表示):
明文数据:0000000000000000
加密密钥:0123456789ABCDEFFEDCBA9876543210
加密结果:08D7B4FB629D0885密文数据:0000000000000000
解密密钥:0123456789ABCDEFFEDCBA9876543210
解密结果:C1E6E95D2166B5C4 

解决方案 »

  1.   

    ljz9425  你好,你说的是下面那的吗?
    function EncryStr_3DES(Str, Key: String): String;
    begin
      if Length(Key) < 16 then
        while Length(Key) < 16 do
          Key := Key + Chr(0);
      Result := EncryStr(Str, Copy(Key, 1, 8));
      Result := DecryStr(Result, Copy(Key, 9, 8));
      Result := EncryStr(Result, Copy(Key, 1, 8));
    end;
    算出来的结果不对
      

  2.   

    3DES有128和192位密钥2种模式, 看你的密钥都已经超过128了, 所以你可以试试
      Result := EncryStr(Str, Copy(Key, 1, 8));
      Result := DecryStr(Result, Copy(Key, 9, 8));
      Result := EncryStr(Result, Copy(Key, 17, 8)); 
    如果不行, 你要检查一下你传入的内容了, 实际上给出的内容是字符串的模式, 你就必须转, 比如 00000000 是指内存的 00000000 是source := #0#0#0#0#0#0#0#0; 而不是 
    source := '00000000' 这个你必须是在delphi7版本里做.
      

  3.   

    我刚才看了一下计算是正确的, 你可以试试
    source := #0#0#0#0#0#0#0#0;
    key := #$01#$23#$45#$67#$89#$AB#$CD#$EF#$FE#$DC#$BA#$98#$76#$54#$32#$10
    出来的结果你在编译器里直接调试Dump 出8个字节的内存值就是08D7B4FB629D0885, 你不能直接看String的值那个是不对的, Des的作者是为了方便才这么写的, 其实这样很容易让人误解