13,826
社区成员
发帖
与我相关
我的任务
分享
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);
}
}