function EncryptString(Source, Key: string): string;
//对字符串加密(Source:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
Range: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := 'delphi';
KeyPos := 0;
Range := 256;
randomize;
Offset := random(Range);
Dest := format('%1.2x', [Offset]);
for SrcPos := 1 to Length(Source) do
begin
SrcAsc := (Ord(Source[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;
result := Dest;
end;
function UnEncryptString(Source, Key: string): string;
//对字符串解密(Src:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
TmpSrcAsc: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := 'delphi';
KeyPos := 0;
Offset := strtoint('$' + copy(Source, 1, 2));
SrcPos := 3;
repeat
SrcAsc := strtoint('$' + copy(Source, 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(Source);
result := Dest;
end;
//对字符串加密(Source:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
Range: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := 'delphi';
KeyPos := 0;
Range := 256;
randomize;
Offset := random(Range);
Dest := format('%1.2x', [Offset]);
for SrcPos := 1 to Length(Source) do
begin
SrcAsc := (Ord(Source[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;
result := Dest;
end;
function UnEncryptString(Source, Key: string): string;
//对字符串解密(Src:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
TmpSrcAsc: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := 'delphi';
KeyPos := 0;
Offset := strtoint('$' + copy(Source, 1, 2));
SrcPos := 3;
repeat
SrcAsc := strtoint('$' + copy(Source, 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(Source);
result := Dest;
end;
// strlen,strcpy,strcat等等就够用了。
// begin..end之间相当于{}
// string,可以用char*
// length()->strlen,strtoint->atoi(), copy->strcpy()
// 字符串相加用strcat
// repeat..until ->do{}while()// 一句一句翻吧,看了下,每句对应写成C的就行了。
而是愿不愿意搭上时间帮你。
{
int KeyPos=0;
int iRange=256;
int KeyLen=Key.GetLength(); if(KeyLen==0)
Key="delphi";
srand(time(0));
int Offset=rand() % iRange; char str[2];
sprintf(str,"%1.2x",Offset);
CString Dest(str);
int SrcAsc; int iLen=Source.GetLength(); char *pSrc=Source.GetBuffer(0);
char *pKey=Key.GetBuffer(0); for(int SrcPos=0;SrcPos<iLen;SrcPos++)
{
SrcAsc=pSrc[SrcPos]; SrcAsc=(SrcAsc+Offset) % 255;
if(KeyPos<KeyLen) KeyPos++;
else KeyPos=1; SrcAsc=SrcAsc ^ pKey[KeyPos-1];
sprintf(str,"%1.2x",SrcAsc);
Dest+=str;
Offset=SrcAsc;
} Source.ReleaseBuffer();
Key.ReleaseBuffer(); Dest.MakeUpper();
return Dest;
}CString UnEncryptString(CString &Source, CString &Key)
{
int KeyLen=Key.GetLength();
if(KeyLen==0)
Key="delphi";
int KeyPos=0;
CString Dest;
int iLen=Source.GetLength();
char *pSrc=Source.GetBuffer(0);
char *pKey=Key.GetBuffer(0);
char cOffset[3];
memset(cOffset,1,3);
memcpy(cOffset,pSrc,2);
cOffset[2]='\0';
int Offset=strtol(cOffset,NULL,16);
int SrcAsc,TmpSrcAsc;
int SrcPos=2;
while(SrcPos<iLen)
{
memset(cOffset,1,3);
memcpy(cOffset,pSrc+SrcPos,2);
cOffset[2]='\0';
SrcAsc=strtol(cOffset,NULL,16);
if (KeyPos<KeyLen)
KeyPos++;
else
KeyPos=1;
TmpSrcAsc=SrcAsc ^ pKey[KeyPos-1];
if (TmpSrcAsc<=Offset)
TmpSrcAsc=255+TmpSrcAsc-Offset;
else
TmpSrcAsc-=Offset;
Dest+=TmpSrcAsc;
Offset=SrcAsc;
SrcPos+=2;
}
Source.ReleaseBuffer();
Key.ReleaseBuffer();
return Dest;
}