加密得到的秘文,以string的类型存储可以么?
给我举一个完整的小例子可以么?

解决方案 »

  1.   

    function addkey(str1:string):string;//加密
    var
    i:integer;
    temp:string;
    begin
    temp:=str1;
    for i:=1 to length(str1) do
     begin
       temp[i]:=char(ord(str1[i]) xor (i));
     end;
     addkey:=temp;
    end;
      

  2.   

    TIntData = array of Integer;
      TMd5Digest = class(TObject)
      protected
        function Add(X, Y: Integer): Integer;
        function Rol(X, n: Integer): Integer;
        function Cmn(q, a, b, x, s, t: Integer): Integer;
        function Cvt(S: String): TIntData;
        function rHex(X: Integer): String; 
      public
        function ff(a, b, c, d, x, s, t: Integer): Integer;
        function gg(a, b, c, d, x, s, t: Integer): Integer;
        function hh(a, b, c, d, x, s, t: Integer): Integer;
        function ii(a, b, c, d, x, s, t: Integer): Integer;
        function Md5(S: String): String;
      published  end;{ TMd5Digest }function TMd5Digest.Add(X, Y: Integer): Integer;
    var
      lsw, msw: Integer;
    begin
      //Result := X + Y;
      //Add integers, wrapping at 2^32. This uses 16-bit operations internally
      //to work around bugs in some JS interpreters.
      lsw := (X and $ffff) + (Y and $ffff);
      msw := (X shr 16) + (Y shr 16) + (lsw shr 16);
      Result := (msw shl 16) or (lsw and $ffff);
    end;function TMd5Digest.Cmn(q, a, b, x, s, t: Integer): Integer;
    begin
      Result := Add(Rol(Add(Add(a, q), Add(x, t)), s), b);
    end;function TMd5Digest.Cvt(S: String): TIntData;
    var
      nblk: Integer;
      len, i: Integer;
    begin
      len := Length(S);
      nblk := ((len + 8) shr 6) + 1;
      SetLength(Result, nblk * 16);
      for i := 0 to (nblk * 16 - 1) do Result[i] := 0;
      for i := 0 to len - 1 do
        Result[i shr 2] := Result[i shr 2] or
          (Ord(S[i + 1]) shl ((i mod 4) * 8));
      Result[len shr 2] := Result[len shr 2] or
        ($80 shl ((len mod 4) * 8));
      Result[nblk * 16 - 2] := len * 8;
    end;function TMd5Digest.ff(a, b, c, d, x, s, t: Integer): Integer;
    begin
      Result := Cmn((b and c) or (not b and d), a, b, x, s, t);
    end;function TMd5Digest.gg(a, b, c, d, x, s, t: Integer): Integer;
    begin
      Result := Cmn((b and d) or (c and not d), a, b, x, s, t);
    end;function TMd5Digest.hh(a, b, c, d, x, s, t: Integer): Integer;
    begin
      Result := Cmn(b xor c xor d, a, b, x, s, t);
    end;function TMd5Digest.ii(a, b, c, d, x, s, t: Integer): Integer;
    begin
      Result := Cmn(c xor (b or not d), a, b, x, s, t);
    end;function TMd5Digest.Md5(S: String): String;
    var
      x: TIntData;
      a, b, c, d: Integer;
      olda, oldb, oldc, oldd: Integer;
      len, i: Integer;
    begin
      x := Cvt(S);
      len := Length(x);
      a :=  1732584193;
      b := -271733879;
      c := -1732584194;
      d :=  271733878;  i := 0;
      while i < len do
      begin
        olda := a;
        oldb := b;
        oldc := c;
        oldd := d;    a := ff(a, b, c, d, x[i+ 0], 7 , -680876936);
        d := ff(d, a, b, c, x[i+ 1], 12, -389564586);
        c := ff(c, d, a, b, x[i+ 2], 17,  606105819);
        b := ff(b, c, d, a, x[i+ 3], 22, -1044525330);
        a := ff(a, b, c, d, x[i+ 4], 7 , -176418897);
        d := ff(d, a, b, c, x[i+ 5], 12,  1200080426);
        c := ff(c, d, a, b, x[i+ 6], 17, -1473231341);
        b := ff(b, c, d, a, x[i+ 7], 22, -45705983);
        a := ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
        d := ff(d, a, b, c, x[i+ 9], 12, -1958414417);
        c := ff(c, d, a, b, x[i+10], 17, -42063);
        b := ff(b, c, d, a, x[i+11], 22, -1990404162);
        a := ff(a, b, c, d, x[i+12], 7 ,  1804603682);
        d := ff(d, a, b, c, x[i+13], 12, -40341101);
        c := ff(c, d, a, b, x[i+14], 17, -1502002290);
        b := ff(b, c, d, a, x[i+15], 22,  1236535329);    a := gg(a, b, c, d, x[i+ 1], 5 , -165796510);
        d := gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
        c := gg(c, d, a, b, x[i+11], 14,  643717713);
        b := gg(b, c, d, a, x[i+ 0], 20, -373897302);
        a := gg(a, b, c, d, x[i+ 5], 5 , -701558691);
        d := gg(d, a, b, c, x[i+10], 9 ,  38016083);
        c := gg(c, d, a, b, x[i+15], 14, -660478335);
        b := gg(b, c, d, a, x[i+ 4], 20, -405537848);
        a := gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
        d := gg(d, a, b, c, x[i+14], 9 , -1019803690);
        c := gg(c, d, a, b, x[i+ 3], 14, -187363961);
        b := gg(b, c, d, a, x[i+ 8], 20,  1163531501);
        a := gg(a, b, c, d, x[i+13], 5 , -1444681467);
        d := gg(d, a, b, c, x[i+ 2], 9 , -51403784);
        c := gg(c, d, a, b, x[i+ 7], 14,  1735328473);
        b := gg(b, c, d, a, x[i+12], 20, -1926607734);    a := hh(a, b, c, d, x[i+ 5], 4 , -378558);
        d := hh(d, a, b, c, x[i+ 8], 11, -2022574463);
        c := hh(c, d, a, b, x[i+11], 16,  1839030562);
        b := hh(b, c, d, a, x[i+14], 23, -35309556);
        a := hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
        d := hh(d, a, b, c, x[i+ 4], 11,  1272893353);
        c := hh(c, d, a, b, x[i+ 7], 16, -155497632);
        b := hh(b, c, d, a, x[i+10], 23, -1094730640);
        a := hh(a, b, c, d, x[i+13], 4 ,  681279174);
        d := hh(d, a, b, c, x[i+ 0], 11, -358537222);
        c := hh(c, d, a, b, x[i+ 3], 16, -722521979);
        b := hh(b, c, d, a, x[i+ 6], 23,  76029189);
        a := hh(a, b, c, d, x[i+ 9], 4 , -640364487);
        d := hh(d, a, b, c, x[i+12], 11, -421815835);
        c := hh(c, d, a, b, x[i+15], 16,  530742520);
        b := hh(b, c, d, a, x[i+ 2], 23, -995338651);    a := ii(a, b, c, d, x[i+ 0], 6 , -198630844);
        d := ii(d, a, b, c, x[i+ 7], 10,  1126891415);
        c := ii(c, d, a, b, x[i+14], 15, -1416354905);
        b := ii(b, c, d, a, x[i+ 5], 21, -57434055);
        a := ii(a, b, c, d, x[i+12], 6 ,  1700485571);
        d := ii(d, a, b, c, x[i+ 3], 10, -1894986606);
        c := ii(c, d, a, b, x[i+10], 15, -1051523);
        b := ii(b, c, d, a, x[i+ 1], 21, -2054922799);
        a := ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
        d := ii(d, a, b, c, x[i+15], 10, -30611744);
        c := ii(c, d, a, b, x[i+ 6], 15, -1560198380);
        b := ii(b, c, d, a, x[i+13], 21,  1309151649);
        a := ii(a, b, c, d, x[i+ 4], 6 , -145523070);
        d := ii(d, a, b, c, x[i+11], 10, -1120210379);
        c := ii(c, d, a, b, x[i+ 2], 15,  718787259);
        b := ii(b, c, d, a, x[i+ 9], 21, -343485551);    a := add(a, olda);
        b := add(b, oldb);
        c := add(c, oldc);
        d := add(d, oldd);
        i := i + 16;
      end;
      Result := rHex(a) + rHex(b) + rHex(c) + rHex(d);
    end;function TMd5Digest.rHex(X: Integer): String;
    const
      HexChs: String = '0123456789abcdef';
    var
      i: Integer;
    begin
      SetLength(Result, 8);
      //for i := 1 to 8 do
      //  Result[i] := HexChs[(X shr ((8 - i) shl 2)) and $f + 1];
      //转换为16进制的表示方法和IntToHex的不同
      for i := 0 to 3 do
      begin
        Result[i * 2 + 1] := HexChs[(X shr (i * 8 + 4)) and $f + 1];
        Result[i * 2 + 2] := HexChs[(X shr (i * 8)) and $f + 1];
      end;
    end;function TMd5Digest.Rol(X, n: Integer): Integer;
    begin
      //Bitwise rotate a 32-bit number to the left
      Result := (X shl n) or (X shr (32 - n));
    end;
    使用var
      s : string;
      md5 : TMD5Digest;
    begin
      Md5 := TMd5Digest.Create;
      s := Md5.Md5('userid' + '_' + 'mypass');
    end;
      

  3.   

    你总得把你的MD5加密函数的原型提供出来吧,一楼的方法就是把一个字符串和这个字符串中每个字符所在的位置进行异或的加密算法。和你的MD5加密算法完全不搭边
      

  4.   

    procedure 加密过程;
    var
      md5: TIdCoderMd5;
    begin
      md5 := TICoderMd5.Create;
      md5.Reset;
      md5.CodeString(明文密码);
      暗文密码 := md5.CompleteInput;
      md5.Free;
    end;
    我是这么做的,但是暗文密码是string型,里面有一些特殊的字符,进行密码验证的时候总有问题,我猜它是一个stringlist的输出类型,但是不知道用什么分隔符隔开的?
    有谁知道么?
      

  5.   

    MD5不是加密算法,你要的是加密还是MD5?