你这样加密当然存在问题; 如相加后出现单引号; 肯定出问题; 以下是我对你加密算法的简单修改; 当然你可以做的更好.我现在加密后的字符串只含有0--9; 你可以将之加密为16进制或其它;
(Email: [email protected])
===============================================================================
unit cls_crypt;interface
uses
SysUtils, Classes, Controls, ExtCtrls, Mask;
type
TCrypt = class
public
Function Lock(Key, Source: String): String;
//用户口令加密 Function UnLock(Key, Dest: String): String;
//用户口令解密
end;implementationFunction TCrypt.Lock(Key, Source: String): String;
{
功能:用户口令加密。
============================================================
加密密匙(Key);调用时为用户ID编号;进入该函数后,若
Length(Key)<Length(Source)则在Key后补字符0
直至Length(Key)=Length(Source);用用户ID作
加密密匙可以防止系统管理员或非法用户直接修
改用户口令字或通过复制其他用户的口令字进入系统。
加密算法 : 先将 IntToStr(ord(Source[i]) + ord(Key[i]))
拼接在一起; 然后再将整个字符串倒转生成加密后的
口令字
============================================================
}
var
i,len : integer;
tmp,str : String;
Dest : String;
begin
str := '';
Dest:= '';
len := Length(Source); while Length(Key) < len do Key := Key + '0'; //先将 IntToStr(ord(Source[i]) + ord(Key[i]))拼接在一起;
for i:=1 to len do
begin
tmp := IntToStr( ord(Source[i]) + ord(Key[i]) );
while Length(tmp) < 3 do tmp := '0' + tmp ;
str := str + tmp;
end; len := Length(str); //将整个字符串倒转
for i:=len downto 1 do Dest := Dest + str[i]; Result := Dest;
end;Function TCrypt.UnLock(Key, Dest: String): String;
{
功能:用户口令解密。
============================================================
解密密匙(Key);调用时为用户ID编号;进入该函数后,若
Length(Key)<Length(Dest) 则在Key后补字符0
直至Length(Key)=Length(Dest);
Dest : 为加密字符串
解密算法 : 先将整个字符串倒转; 以三位为一个单元减去ord(Key[i])
生成一个字符; 拼接在一起恢复口令字
============================================================
}
var
i,len : integer;
p : byte;
tmp,str : String;
Source : String;begin
str := '';
Source:= ''; len := Length(Dest); while Length(Key) < (len div 3) do Key := Key + '0'; for i:=len downto 1 do str := str + Dest[i]; //字符串倒转 try
begin
len := len div 3;
for i:= 1 to len do
begin
tmp := copy(str, i*3-2, 3);
p := StrToInt(tmp) - ord(Key[i]);
Source := Source + chr( p );
end;
end
except
Source := ''; //若口令中含有非法字符, 则置空
end;
Result := Source;
end;end.
(Email: [email protected])
===============================================================================
unit cls_crypt;interface
uses
SysUtils, Classes, Controls, ExtCtrls, Mask;
type
TCrypt = class
public
Function Lock(Key, Source: String): String;
//用户口令加密 Function UnLock(Key, Dest: String): String;
//用户口令解密
end;implementationFunction TCrypt.Lock(Key, Source: String): String;
{
功能:用户口令加密。
============================================================
加密密匙(Key);调用时为用户ID编号;进入该函数后,若
Length(Key)<Length(Source)则在Key后补字符0
直至Length(Key)=Length(Source);用用户ID作
加密密匙可以防止系统管理员或非法用户直接修
改用户口令字或通过复制其他用户的口令字进入系统。
加密算法 : 先将 IntToStr(ord(Source[i]) + ord(Key[i]))
拼接在一起; 然后再将整个字符串倒转生成加密后的
口令字
============================================================
}
var
i,len : integer;
tmp,str : String;
Dest : String;
begin
str := '';
Dest:= '';
len := Length(Source); while Length(Key) < len do Key := Key + '0'; //先将 IntToStr(ord(Source[i]) + ord(Key[i]))拼接在一起;
for i:=1 to len do
begin
tmp := IntToStr( ord(Source[i]) + ord(Key[i]) );
while Length(tmp) < 3 do tmp := '0' + tmp ;
str := str + tmp;
end; len := Length(str); //将整个字符串倒转
for i:=len downto 1 do Dest := Dest + str[i]; Result := Dest;
end;Function TCrypt.UnLock(Key, Dest: String): String;
{
功能:用户口令解密。
============================================================
解密密匙(Key);调用时为用户ID编号;进入该函数后,若
Length(Key)<Length(Dest) 则在Key后补字符0
直至Length(Key)=Length(Dest);
Dest : 为加密字符串
解密算法 : 先将整个字符串倒转; 以三位为一个单元减去ord(Key[i])
生成一个字符; 拼接在一起恢复口令字
============================================================
}
var
i,len : integer;
p : byte;
tmp,str : String;
Source : String;begin
str := '';
Source:= ''; len := Length(Dest); while Length(Key) < (len div 3) do Key := Key + '0'; for i:=len downto 1 do str := str + Dest[i]; //字符串倒转 try
begin
len := len div 3;
for i:= 1 to len do
begin
tmp := copy(str, i*3-2, 3);
p := StrToInt(tmp) - ord(Key[i]);
Source := Source + chr( p );
end;
end
except
Source := ''; //若口令中含有非法字符, 则置空
end;
Result := Source;
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货