C语言和delphi语言的解密函数得不到同样的结果请高手进来帮忙看看函数有没问题

dyzhao889 2013-01-24 01:26:08
key =0X499602DB
M1 =0XFAFAFAFA
IA1 =0XF7F7F7F7
IC1 =0XF5F5F5F5


数据:594FF2C9CFC457A88E99110856BE028D02B16BCC21546F5D0ADA65056AA6E7B2
解密:550013011114431011055207021387930040003C00000000030001100F000000

C程序:

Const unsigned long M1 =A;
Const unsigned long IA1 =B;
Const unsigned long IC1 =C;
Void encrypt(
unsigned long key,
unsigned char* buffer,
unsigned short size )
{
unsigned short idx = 0;
if( key == 0 ) key = 1;
while( idx < size )
{
key = IA1 * ( key % M1 ) + IC1;
buffer[idx++] ^= (unsigned char)((key>>20)&0xFF);
}
}

delphi程序:

procedure encrypt(M1,IA1,IC1,key:DWORD;var info:string;size:word);
var
idx:word;
str:string;
begin
idx := 0;
str:=info;
if key = 0 then key := 1;
while (idx < size) do
begin
key := IA1 * (key mod M1) + IC1;
info[idx]:=chr( ord(str[idx]) xor ((key shr 20)and 255));
inc(idx);
end;
end;


C函数和delphi函数解不出一样的结果,请两种语言都懂的高手帮忙看看,先谢谢了
...全文
237 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dyzhao889 2013-01-24
可以了,谢谢帮主.
  • 打赏
  • 举报
回复
dyzhao889 2013-01-24
idx := 1; 这样改就可以了吗?帮主
  • 打赏
  • 举报
回复
dyzhao889 2013-01-24
应该怎么改呢?帮主
  • 打赏
  • 举报
回复
bdmh 2013-01-24
char* buffer的索引是开始是0 info是string类型,它的字符索引从1开始,不是0
  • 打赏
  • 举报
回复
相关推荐
发帖
语言基础/算法/系统设计
加入

1.6w+

社区成员

Delphi 语言基础/算法/系统设计
申请成为版主
帖子事件
创建了帖子
2013-01-24 01:26
社区公告
暂无公告