求Delphi版标准3DES算法源码?

duduxia 2009-05-15 06:38:34
在网上搜集DES的代码,即DES.pas,现在不知道怎么去实现3DES?
3DES
明文:123
密匙:123
密文:196B8739B17BBFF5

//3DES(加密) = DES(key1, 加密) DES(key2, 解密) DES(key3, 加密)
//3DES(解密) = DES(key3, 解密) DES(key2, 加密) DES(key1, 解密)
function AnsiEncryStr_3DES(Str, Key: AnsiString): AnsiString;
var
Src,sKey : AnsiString;
begin
Result:='';
Src:=Str;
sKey:=Key;
if Length(sKey)<24 then
while Length(sKey)<24 do
sKey :=sKey + AnsiChar(0);

Result:=AnsiEncryStr(Src, AnsiCopy(sKey,1,8));
Result:=AnsiDecryStr(Result,AnsiCopy(sKey,9,8));
Result:=AnsiEncryStr(Result,AnsiCopy(sKey,17,8));
end;

//XXX后8位无数据
procedure Make3Key(inKey: array of Byte; var outKey: array of TKeyByte);
const
bitDisplace: array [0..23] of Byte =(
1,1,2,2, 2,2,2,2, 1,2,2,2, 2,2,2,1,
0,0,0,0, 0,0,0,0);

先求Make3Key的bitDisplace的24位表!
DES.PAS已有。

即3DES标准算法完整代码。
...全文
770 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
menggirl 2009-06-16
  • 打赏
  • 举报
回复
楼主看到了给我传一份25378721@qq.com
duduxia 2009-06-15
  • 打赏
  • 举报
回复
已经自己找到答案了。结贴啦。
duduxia 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 diecode 的回复:]
如果你有DES算法那就很简单了
3DES(加密) = DES(key1, 加密) DES(key2, 解密) DES(key1, 加密)
3DES(解密) = DES(key1, 解密) DES(key2, 加密) DES(key1, 解密)
这个是标准的3DES过程
[/Quote]

3DES算法,得到的密文和标准的不匹配
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3960419

3DES标准密文。
3DES
明文:123
密匙:123
密文:196B8739B17BBFF5
duduxia 2009-06-03
  • 打赏
  • 举报
回复
3DES算法,得到的密文和标准的不匹配
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3960419

3DES标准密文。
3DES
明文:123
密匙:123
密文:196B8739B17BBFF5
diecode 2009-05-31
  • 打赏
  • 举报
回复
如果你有DES算法那就很简单了
3DES(加密) = DES(key1, 加密) DES(key2, 解密) DES(key1, 加密)
3DES(解密) = DES(key1, 解密) DES(key2, 加密) DES(key1, 解密)
这个是标准的3DES过程
qiglave 2009-05-30
  • 打赏
  • 举报
回复
DES算法源码,直接调用 EnCrypt,DeCrypt即可,
太长了,不能超过8000,你在网上找一下,也可以找到。

sina的
http://down1.tech.sina.com.cn/download/pda/2004-05-08/3023.shtml

unit DESCrypt;

interface
uses
SysUtils;

function EnCrypt(aStr: string; acKey: string): string;
function DeCrypt(aStr: string; acKey: string): string;

implementation

type
TByte32 = array[1..32] of byte;
TSData = array[0..63] of byte;
TBlock = array[0..7] of byte;

const
SA1: TSData =
(1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1,
0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1);
SA2: TSData =
(1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0,
0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1);
SA3: TSData =
(1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0,
1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1);
SA4: TSData =
(0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,
1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1);
SA5: TSData =
(0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0,
0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0);
SA6: TSData =
(1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1,
1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1);
SA7: TSData =
(0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1);
SA8: TSData =
(1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0,
0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1);
SB1: TSData =
(1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0,
1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1);
SB2: TSData =
(1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1,
0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0);
SB3: TSData =
(0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0,
1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1);



duduxia 2009-05-29
  • 打赏
  • 举报
回复
自己顶一下。看还有高手没有?!
duduxia 2009-05-23
  • 打赏
  • 举报
回复
非标准的3DES,网上有资料了。
标准的3DES没有测试数据。
顶。
duduxia 2009-05-22
  • 打赏
  • 举报
回复
楼上的有测试数据嘛?
hjcrf 2009-05-20
  • 打赏
  • 举报
回复
用这个的人因该很多 3就是加密三次的 具体哪个表才是标准的我也不大清楚
我自己用的都是非标准的呵呵
duduxia 2009-05-20
  • 打赏
  • 举报
回复
自己顶一下。
duduxia 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 unsigned 的回复:]
http://topic.csdn.net/u/20071127/10/89632a17-b11f-4a5c-9628-6204cabfffb9.html
[/Quote]

以上已经看过了。
测试结果不对。
3DES
明文:123
密匙:123
密文:196B8739B17BBFF5

3DES不同与DES的关键函数好像是
procedure Make3Key(inKey: array of Byte; var outKey: array of TKeyByte);
bitDisplace: array [0..23] of Byte =(
1,1,2,2, 2,2,2,2, 1,2,2,2, 2,2,2,1,

而DES函数是
procedure Make3Key(inKey: array of Byte; var outKey: array of TKeyByte);
bitDisplace: array [0..15] of Byte =(
1,1,2,2, 2,2,2,2, 1,2,2,2, 2,2,2,1)
duduxia 2009-05-15
  • 打赏
  • 举报
回复
不好意思,多开了一个,以上请求删除!
xiaowei_001 2009-05-15
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20071127/10/89632a17-b11f-4a5c-9628-6204cabfffb9.html

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧