你这样加密当然存在问题; 如相加后出现单引号; 肯定出问题; 以下是我对你加密算法的简单修改; 当然你可以做的更好.我现在加密后的字符串只含有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.