一个C加密算法换成delphi怎么写呢 ?

udnui 2013-11-04 12:45:05
Const unsigned uint32_t M1 =A;
Const unsigned uint32_t IA1 =B;
Const unsigned uint32_t IC1 =C;
Void encrypt(uint32_t key, unsigned char* buffer, uint32_t size )
{
uint32_t idx = 0;
if( 0 = = key )
{
key = 1;
}
uint32_t mkey = M1;
if (0 = = mkey )
{
mkey = 1;
}
while( idx < size )
{
key = IA1 * ( key % mkey ) + IC1;
buffer[idx++] ^= (unsigned char)((key>>20)&0xFF);
}
}
...全文
163 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
udnui 2013-11-07
  • 打赏
  • 举报
回复
buffer[idx]:= Char(Byte(buffer[idx]) xor ((key shr 20) and $ff)); 这行提示内存出错?
sololie 2013-11-07
  • 打赏
  • 举报
回复
代码俺在d2007上编译通过,也测试过,没有你说的内存出错之类的。自己研究研究吧,看球了
sololie 2013-11-04
  • 打赏
  • 举报
回复

const
  M1:Cardinal = $fffa;
  IA1:Cardinal = $fffb;
  IC1:Cardinal = $fffc;

procedure encrypt(key:Cardinal; buffer:PChar; size:Cardinal);
var
  idx, mkey:Cardinal;
begin
  idx:=0;
  if 0=key then key:=1;
  mkey:=M1;
  if 0=mkey then mkey:=1;

  while idx < size do
  begin
     key:= IA1*(key mod mkey)+IC1;
     buffer[idx]:= Char(Byte(buffer[idx]) xor ((key shr 20) and $ff));
     Inc(idx);
  end;
end;

// 测试,放个memo上去
// 点一次加密,再点一次还原
procedure TForm1.btn1Click(Sender: TObject);
var
 s:string;
 I, len: Integer;
begin
  s:='abc0123哈喽';
  len:= Length(s);
  encrypt(3453543121,PChar(s),len);

  mmo1.Clear;
  for I := 1 to len do
    mmo1.Lines[0]:= mmo1.Lines[0] + (IntToStr(ord(s[i])) + ' ')
end;

16,748

社区成员

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

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