有没有高手把这一段delphi写的函数翻成BCB语言,谢谢

youngzi 2008-12-18 01:44:24
function encrypt_str(Src: string; Key: string; Encrypt: Boolean; m_brand: boolean = true): string;
var
idx: integer;
KeyLen: Integer;
KeyPos: Integer;
offset: Integer;
dest: string;
SrcPos: Integer;
SrcAsc: Integer;
TmpSrcAsc: Integer;
Range: Integer;
begin
try
KeyLen := Length(Key);
if KeyLen = 0 then key := 'wangy lsy dmp';
KeyPos := 0;
SrcPos := 0;
SrcAsc := 0;
Range := 256;
if Encrypt then
begin
Randomize;
offset := 18;
if m_brand then
offset := Random(Range);
dest := format('%1.2x', [offset]);
for SrcPos := 1 to Length(Src) do
begin
SrcAsc := (Ord(Src[SrcPos]) + offset) mod 255;
if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1;
SrcAsc := SrcAsc xor Ord(Key[KeyPos]);
dest := dest + format('%1.2x', [SrcAsc]);
offset := SrcAsc;
end;
end
else
begin
offset := StrToInt('$' + copy(src, 1, 2));
SrcPos := 3;
repeat
SrcAsc := StrToInt('$' + copy(src, SrcPos, 2));
if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1;
TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
if TmpSrcAsc <= offset then
TmpSrcAsc := 255 + TmpSrcAsc - offset
else
TmpSrcAsc := TmpSrcAsc - offset;
dest := dest + chr(TmpSrcAsc);
offset := srcAsc;
SrcPos := SrcPos + 2;
until SrcPos >= Length(Src);
end;
Result := Dest;
except
showmessage(src);
end;
end;
...全文
60 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2008-12-18
  • 打赏
  • 举报
回复
AnsiString encrypt_str(AnsiString Src, AnsiString Key, bool Encrypt, bool m_brand = true)
{
int idx,KeyLen,KeyPos,offset;
AnsiString dest;
int SrcPos,SrcAsc,TmpSrcAsc,Range;

try {
KeyLen = Key.Length();
if (KeyLen == 0 ) Key = "wangy lsy dmp";
KeyPos = 0;
SrcPos = 0;
SrcAsc = 0;
Range = 256;
if (Encrypt)
{
Randomize();
offset = 18;
if (m_brand)
offset = Random(Range);
dest.sprintf("%1.2x", offset);
for (SrcPos = 1 ; SrcPos <= Src.Length() ; SrcPos ++)
{
SrcAsc = (((unsigned char)Src[SrcPos]) + offset) % 255;
if (KeyPos < KeyLen) KeyPos = KeyPos + 1;
else KeyPos = 1;
SrcAsc = SrcAsc ^ (unsigned char)Key[KeyPos];
AnsiString tmpStr;
tmpStr.sprintf("%1.2x", SrcAsc);
dest = dest + tmpStr;
offset = SrcAsc;
}
}
else
{
offset = StrToInt("0x" + Src.SubString(1, 2));
SrcPos = 3;
do{
SrcAsc = StrToInt("0x" + Src.SubString( SrcPos, 2));
if (KeyPos < KeyLen ) KeyPos = KeyPos + 1;
else KeyPos = 1;
TmpSrcAsc = SrcAsc ^ (unsigned char)Key[KeyPos];
if (TmpSrcAsc <= offset )
TmpSrcAsc = 255 + TmpSrcAsc - offset;
else
TmpSrcAsc = TmpSrcAsc - offset;
dest = dest + AnsiString((char)TmpSrcAsc);
offset = SrcAsc;
SrcPos = SrcPos + 2;
}while (SrcPos < Src.Length());
}
return dest;
} catch(...){
ShowMessage(Src);
}
}
babycathq2000 2008-12-18
  • 打赏
  • 举报
回复
有点长。

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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