function GetXORKey(key: string): DWORD;
var
i: integer;
begin
Result:=$12345678; // magic starter
for i:=1 to Length(key) do
begin
Result:=Result+ ord(key[i]) shl i;
end;
end;
function ToggleText(var text: string; key: DWORD): string;
var
i: integer;
subKey: array [0..3] of byte;
begin
CopyMemory(@subKey,@key,sizeof(key));
for i:=1 to length(text) do
begin
text[i]:=chr(ord(text[i]) xor subKey[i mod 4]);
end;
end;
procedure Test;
var
s: string;
begin
s:='test text';
ToggleText(s,GetXORKey('JGTM2000'));
ShowMessage(s); // 看看变成什么模样了
ToggleText(s,GetXORKey('JGTM2000')); // 如果不是JGTM2000就不一定对了
ShowMessage(s); // 回来了吧!
end;
下面是一个利用用户名和密码原文生成的加密程序:
这里面没有固定的密钥,加密使用username和password
function encryptpassword(username:string;password:string):string;
var beforepassword,afterpassword:string;
i,j,k,len:integer;
order:integer;
begin
beforepassword:=username+password;
afterpassword:='';
len:=length(beforepassword);
if len = 0 then
afterpassword:='passwordnil'
else
begin
j:=0;
for i:=1 to len do
begin
j:=j+ord(beforepassword[i])+i;
end;
K:=round(j/len);
if len < 10 then
begin
for i:=1 to len do
begin
j:=ord(beforepassword[i]);
if j < k then
begin
order:=(j+k+i)mod 128;
if order < 60 then order:=order+60;
if order>100 then order:=order-40;
afterpassword:=afterpassword + char(order);
order:=(k-j+i)mod 128;
if order < 60 then order:=order+60;
if order>100 then order:=order-40;
afterpassword:=afterpassword + char(order);
end
else
begin
order:=(j+k+i)mod 128;
if order < 60 then order:=order+60;
if order>100 then order:=order-40;
afterpassword:=afterpassword + char(order);
order:=(j-k+i) mod 128;
if order < 60 then order:=order+60;
if order>100 then order:=order-40;
afterpassword:=afterpassword + char(order);
end;
end;
end
else
begin
for i:=1 to len do
begin
order:=ord(beforepassword[i]);
order:=order mod 128;
if order < 60 then order:=order+60;
if order>100 then order:=order-40;
afterpassword:=afterpassword + char(order);
end;
end;
end;