key =0X499602DB
M1 =0XFAFAFAFA
IA1 =0XF7F7F7F7
IC1 =0XF5F5F5F5
数据:594FF2C9CFC457A88E99110856BE028D02B16BCC21546F5D0ADA65056AA6E7B2
解密:550013011114431011055207021387930040003C00000000030001100F000000C程序: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函数解不出一样的结果,请两种语言都懂的高手帮忙看看,先谢谢了delphi解密C语言同样结果
M1 =0XFAFAFAFA
IA1 =0XF7F7F7F7
IC1 =0XF5F5F5F5
数据:594FF2C9CFC457A88E99110856BE028D02B16BCC21546F5D0ADA65056AA6E7B2
解密:550013011114431011055207021387930040003C00000000030001100F000000C程序: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函数解不出一样的结果,请两种语言都懂的高手帮忙看看,先谢谢了delphi解密C语言同样结果
info是string类型,它的字符索引从1开始,不是0
这样改就可以了吗?帮主