C++Builder 程序员博客
18 Dec
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;
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); } }