现在采用XOR对字符串进行加密,结果问题出在加密以后在字符串中出现#0,字符串就表示自动截断,解密的时候字符串就自然少了一截。现在怎样对字符串加密?各位兄台帮忙!

解决方案 »

  1.   

    string中是可以保存#0~~
    除非你使用的是PChar~~
    这样你在加个变量保存长度不也可以~~
      

  2.   

    到Torry.net上查查,有许多DES加密算法(数据加密标准)!!!我给你一个简单的算法:
    Unit EncryptIt;Interface
    Uses
      Classes;
    Const
      C1 = 05888;
      C2 = 01958;
      kk = 12588;Function Encrypt(Const S: String): String;
    Function Decrypt(Const S: String): String;ImplementationUses Sysutils;Function Encrypt(Const S: String): String;
    Var
      I, key: Integer;
      M: Byte;
      str: String;
    Begin
      key := kk;
      For I := 1 To Length(S) Do
      Begin
        M := byte(S[I]) Xor (Key Shr 4);
        Key := (M + Key) * C1 + C2;
        str := Format('%2x', [M]);
        If str[1] = ' ' Then
          str[1] := '0';
        Result := Result + str;
      End;
    End;Function Decrypt(Const S: String): String;
    Var
      I, key: Integer;
      M: Byte;
    Begin
      key := kk;
      For I := 1 To Length(S) Div 2 Do
      Begin
        M := strToInt('x' + copy(s, I * 2 - 1, 2));
        Result := Result + char(M Xor (Key Shr 4));
        Key := (M + Key) * C1 + C2;
      End;
    End;End.
      

  3.   

    那各位兄台看看我的算法了,献丑了!
    Function Encrypt(Str1:String):String;
    //加密程序
    var
      RandomValue,X:Byte;
      Str2:String;
      i:Integer;
    begin
      RandSeed:=12345;
      for i:=1 to Length(Str1) do
      begin
        RandomValue:=Random(255);
        x:=Ord(Str1[i]) XOR Random(256);
        Str2:=Str2 + Chr(x);
      end;
      Result:=Str2;
    end;Function Decrypt(Str1:String):String;
    //解密程序,和加密程序差不多,采用random值是伪随机,
    //如果指定RandomSeed,则Random的开始规律是一致的原理
    var
      RandomValue,X:Byte;
      Str2:String;
      i:Integer;
    begin
      RandSeed:=12345;
      for i:=1 to Length(Str1) do
      begin
        RandomValue:=Random(255);
        x:=Ord(Str1[i]) XOR Random(256);
        Str2:=Str2 + Chr(x);
      end;
      Result:=Str2;
    end;现在问题是如果遇到加密以后字符串中出现#0这个字符,则字符串在存入数据库后再取出,在#0处被自动截断,怎样解决这个问题?
      

  4.   

    sorry,上面
        RandomValue:=Random(255);
        x:=Ord(Str1[i]) XOR Random(256);
    有点问题,应该是:
        RandomValue:=Random(255);
        x:=Ord(Str1[i]) XOR RamdomValue;
      

  5.   

    不过还是谢谢: Delphi_Li(Delphi Li) ,帮了大忙,最少有50分了!:)