function Encry(str: string): string;
var
  I,n: Integer;
begin
   if Length(str) > 0 then
  begin
     for I := 1 to Length(str) do
     begin
      n:=Integer(str[I]) xor (i);
      str[I] := Char(n);
     end;
  end  ;
  Result := str;
end;
用了以上代码会出现回车换行空格制表符等,如何去掉这些

解决方案 »

  1.   

    function Encry(Str: AnsiString): AnsiString;
    var
      P: PByte;
      I, Len: Integer;
    begin
      P := @Str[1];
      Len := Length(Str);
      for I := 1 to Len do
      begin
        P^ := P^ xor I;
        Inc(P);
      end;
      Result := Str;
    end;
      

  2.   

    uses HttpApp;加密:
    密文 := HTTPEncode(Encry(明文));解密:
    明文 := Encry(HTTPDecode(密文));
      

  3.   

    用2个字符表达每个字节(如:'20'表达0x20即空格)
    或base64,则长度没增加那么多
      

  4.   

    我的想法是加密字符是多少位,出来就是多少位。2楼的会出现回车换行空格制表符?base64会改变长度的吧
      

  5.   

    你可以用MD5值的
    比方说 
    abcd 的MD5值是:b8ad396d6383bb1715a786dc8b3a779a
    你可以在获取这个值时,再在那个MD5值中截取一个“源码”的长度
    即可,这个可以“增强密码的保密性”,但是MD5值是不可“逆”的
      

  6.   

    MD5不合适,我是要可逆。我觉得异或应该是可以过滤不要的字符,以下是我的想法。
    function Encry(str: string): string;
    var
      I,n: Integer;
    begin
      if Length(str) > 0 then
      begin
      for I := 1 to Length(str) do
      begin
           n:=Integer(str[I]) xor (i);
           if (n=13) or (n=10) then
                 str[I]:=char(n+2);  //跳过回车,换行
           else   str[I] := Char(n);
      end;
      end ;
      Result := str;
    end;