请教:delphi里怎么算哈希?
我原来找了一个,形式是这样:
procedure DoSHA1(BufferIn:array of byte;DataLen:integer;var BufferOut:array of byte);
var
  Context: TSHA1Context;
  Digest: TSHA1Digest;
begin
  SHA1Init(Context);
  SHA1Update(Context,@BufferIn,DataLen);
  SHA1Final(Context,Digest);
  CopyMemory(@BufferOut,@Digest,20);
end;但是如果输入的数组过长,如10K,则会出错下边是我从网上找的,不知道怎么用。谁能指点下,有现成的也行,最好是算byte类型数组的。http://www.xiaokou.org/2005/10/12/54/

解决方案 »

  1.   

    我靠,该死的csdn,第一次提交回复总是失败,还的再写一遍;
    听三国说inifile单元里有哈希相关函数,你看看先
      

  2.   

    给你一个ELF算法的hash函数,已经改成支持Byte数组了:
    function ELFHash(const ByteAry : Array of byte) : Cardinal;
    var
      i : Cardinal;
      x : Cardinal;
    begin
      Result := 0;
      for i := Low(ByteAry) to High(ByteAry) do
      begin
        Result := (Result shl 4) + ByteAry[i];
        x      := Result and $F0000000;
        if (x <> 0) then
        begin
          Result := Result xor (x shr 24);
        end;
        Result := Result and (not x);
      end;
    end;
      

  3.   

    原来用的那个是sha-1算法。
    楼上的,Cardinal是什么?
      

  4.   

    Cardinal是大于等于0的整数,就当是整数好了。
      

  5.   

    可以参考IniFiles.pas中THashedStringList