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函数解不出一样的结果,请两种语言都懂的高手帮忙看看,先谢谢了
...全文
283 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

16,748

社区成员

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

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