⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hashtests.pas

📁 超级Delphi函数包,包括编程时常需要的一些函数
💻 PAS
字号:
unit HashTests;
{(C) Coban (alex@ritlabs.com)}

interface
uses
  CryptoAPI;

  function HashTestHash(HashType: LongWord): LongWord;  //Test a single hash
  function HashTestLibrary: LongWord;                   //Test whole lib

implementation
function SingleTest(HashType: LongWord; Src, Confirm: String): Boolean;
var
  S: String;
begin
  Result := False;
  if HashStr(HashType, Src, S) = HASH_NOERROR then
    if S = Confirm then
      Result := True;
end;

function HashTestHash(HashType: LongWord): LongWord;
var
  ret: Boolean;
  ctx: THashContext;
  S: String;
  dret: LongWord;
  buf: array[0..100] of Char;
begin
  Result := HASH_NOERROR;
  ret := False;
  case HashType of
    HASH_CRC32: ret := SingleTest(HashType, 'checksum', '7fbeb02e');
    HASH_CRC32B: ret := SingleTest(HashType, 'checksum', '9adf6fde');
    HASH_ADLER32: ret := SingleTest(HashType, 'resume', '09150292');
    HASH_MD2:
    begin
      ret := SingleTest(HashType, '', '8350e5a3e24c153df2275c9f80692773');
      ret := ret and SingleTest(HashType, 'a', '32ec01ec4a6dac72c0ab96fb34c0b5d1');
      ret := ret and SingleTest(HashType, 'abc', 'da853b0d3f88d99b30283a69e6ded6bb');
      ret := ret and SingleTest(HashType, 'message digest', 'ab4f496bfb2a530b219ff33031fe06b0');
      ret := ret and SingleTest(HashType, 'abcdefghijklmnopqrstuvwxyz', '4e8ddff3650292ab5a4108c3aa47940b');
      ret := ret and SingleTest(HashType, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'da33def2a42df13975352846c30338cd');
      ret := ret and SingleTest(HashType, '12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'd5976f79d83d3a0dc9806c3c66f3efd8');
    end;
    HASH_MD4:
    begin
      ret := SingleTest(HashType, '', '31d6cfe0d16ae931b73c59d7e0c089c0');
      ret := ret and SingleTest(HashType, 'a', 'bde52cb31de33e46245e05fbdbd6fb24');
      ret := ret and SingleTest(HashType, 'abc', 'a448017aaf21d8525fc10ae87aa6729d');
      ret := ret and SingleTest(HashType, 'message digest', 'd9130a8164549fe818874806e1c7014b');
      ret := ret and SingleTest(HashType, 'abcdefghijklmnopqrstuvwxyz', 'd79e1c308aa5bbcdeea8ed63df412da9');
      ret := ret and SingleTest(HashType, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', '043f8582f241db351ce627e153e7f0e4');
    end;
    HASH_MD5:
    begin
      ret := SingleTest(HashType, '', 'd41d8cd98f00b204e9800998ecf8427e');
      ret := ret and SingleTest(HashType, 'a', '0cc175b9c0f1b6a831c399e269772661');
      ret := ret and SingleTest(HashType, 'abc', '900150983cd24fb0d6963f7d28e17f72');
      ret := ret and SingleTest(HashType, 'message digest', 'f96b697d7cb7938d525a2f31aaf161d0');
      ret := ret and SingleTest(HashType, 'abcdefghijklmnopqrstuvwxyz', 'c3fcd3d76192e4007dfb496cca67e13b');
      ret := ret and SingleTest(HashType, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'd174ab98d277d9f5a5611c2c9f419d9f');
      ret := ret and SingleTest(HashType, '12345678901234567890123456789012345678901234567890123456789012345678901234567890', '57edf4a22be3c955ac49da2e2107b67a');
    end;
    HASH_SHA1:
    begin
      ret := SingleTest(HashType, 'abc', 'a9993e364706816aba3e25717850c26c9cd0d89d');
      ret := ret and SingleTest(HashType, 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', '84983e441c3bd26ebaae4aa1f95129e5e54670f1');
    end;
    HASH_SHA256:
    begin
      ret := SingleTest(HashType, 'abc', 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad');
      ret := ret and SingleTest(HashType, 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', '248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1');
    end;
    HASH_SHA384:
    begin
      ret := SingleTest(HashType, 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu',
        '09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039');
    end;
    HASH_SHA512:
    begin
      ret := SingleTest(HashType, 'abc', 'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f');
      ret := ret and SingleTest(HashType, 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu',
        '8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909');
    end;
    HASH_TIGER128, HASH_TIGER160, HASH_TIGER192:
    begin
      ret := SingleTest(HASH_TIGER192, '', '24f0130c63ac933216166e76b1bb925ff373de2d49584e7a');
      ret := ret and SingleTest(HASH_TIGER192, 'abc', 'f258c1e88414ab2a527ab541ffc5b8bf935f7b951c132951');
      ret := ret and SingleTest(HASH_TIGER192, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789',
        '467db80863ebce488df1cd1261655de957896565975f9197');
      ret := ret and SingleTest(HASH_TIGER192, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-',
        '00b83eb4e53440c576ac6aaee0a7485825fd15e70a59ffe4');
    end;
    HASH_GOST:
    begin
      ret := SingleTest(HashType, 'This is message, length=32 bytes',
        'b1c466d37519b82e8319819ff32595e047a28cb6f83eff1c6916a815a637fffa');
      ret := ret and SingleTest(HashType, 'Suppose the original message has length = 50 bytes',
        '471aba57a60a770d3a76130635c1fbea4ef14de51f78b4ae57dd893b62f55208');
    end;
    HASH_RIPEMD128:
    begin
      ret := SingleTest(HashType, '', 'cdf26213a150dc3ecb610f18f6b38b46');
      ret := ret and SingleTest(HashType, 'abc', 'c14a12199c66e4ba84636b0f69144c77');
      ret := ret and SingleTest(HashType, 'message digest', '9e327b3d6e523062afc1132d7df9d1b8');
      ret := ret and SingleTest(HashType, 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqabcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'e91806709fd9928ad92be015aeebc562');
      ret := ret and SingleTest(HashType, '12345678901234567890123456789012345678901234567890123456789012345678901234567890', '3f45ef194732c2dbb2c4a2c769795fa3');
    end;
    HASH_RIPEMD160:
    begin
      ret := SingleTest(HashType, '', '9c1185a5c5e9fc54612808977ee8f548b2258d31');
      ret := ret and SingleTest(HashType, 'abc', '8eb208f7e05d987a9b044a8e98c6b087f15a0bfc');
      ret := ret and SingleTest(HashType, 'message digest', '5d0689ef49d2fae572b881b123a85ffa21595f36');
      ret := ret and SingleTest(HashType, 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqabcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', '69a155bddf855b0973a0791d5b7a3326fb83e163');
      ret := ret and SingleTest(HashType, '12345678901234567890123456789012345678901234567890123456789012345678901234567890', '9b752e45573d4b39f4dbd3323cab82bf63326bfb');
    end;
    HASH_HAVAL128: ret := SingleTest(HashType, '', '1bdc556b29ad02ec09af8c66477f2a87');
    HASH_HAVAL160: ret := SingleTest(HashType, 'a', '5e1610fced1d3adb0bb18e92ac2b11f0bd99d8ed');
    HASH_HAVAL192:
    begin
      dret := HashInit(@ctx, HashType);
      if dret = HASH_NOERROR then
      begin
        S := '';
        buf := 'HAVAL'#0;
        ctx.lParam := 4;
        HashUpdate(@ctx, @buf, 5);
        dret := HashFinal(@ctx, S);
        if dret = HASH_NOERROR then
          if S = '74aa31182ff09bcce453a7f71b5a7c5e80872fa90cd93ae4' then
            ret := True;
      end;
    end;
    HASH_HAVAL224:
    begin
      dret := HashInit(@ctx, HashType);
      if dret = HASH_NOERROR then
      begin
        S := '';
        buf := '0123456789'#0;
        ctx.lParam := 4;
        HashUpdate(@ctx, @buf, 10);
        dret := HashFinal(@ctx, S);
        if dret = HASH_NOERROR then
          if S = '144cb2de11f05df7c356282a3b485796da653f6b702868c7dcf4ae76' then
            ret := True;
      end;
    end;
    HASH_HAVAL256:
    begin
      dret := HashInit(@ctx, HashType);
      if dret = HASH_NOERROR then
      begin
        S := '';
        buf := 'abcdefghijklmnopqrstuvwxyz'#0;
        ctx.lParam := 5;
        HashUpdate(@ctx, @buf, 26);
        dret := HashFinal(@ctx, S);
        if dret = HASH_NOERROR then
          if S = '1a1dc8099bdaa7f35b4da4e805f1a28fee909d8dee920198185cbcaed8a10a8d' then
            ret := True;
      end;
      dret := HashInit(@ctx, HashType);
      if dret = HASH_NOERROR then
      begin
        S := '';
        buf := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'#0;
        ctx.lParam := 5;
        HashUpdate(@ctx, @buf, 62);
        dret := HashFinal(@ctx, S);
        if dret = HASH_NOERROR then
        begin
          if S = 'c5647fc6c1877fff96742f27e9266b6874894f41a08f5913033d9d532aeddb39' then
            ret := ret and True
          else
            ret := False;
        end
        else
          ret := False;
      end;
    end;
    else
      Result := HASH_UNK_TYPE;
  end;
  if Result <> HASH_UNK_TYPE then
    if not ret then
      Result := HASH_TEST_FAILED;
end;

function HashTestLibrary: LongWord;
var
  i, HAv, Res: LongWord;
  EnumArray: array[0..HASH_MAX_TYPES - 1] of LongWord;  
begin
  Result := HASH_NOERROR;
  HAv := EnumHashTypes(@EnumArray, SizeOf(EnumArray));
  for i := 0 to HAv - 1 do
  begin
    Res := HashTestHash(EnumArray[i]);
    if Res <> HASH_NOERROR then
    begin
      Result := Res;
      Exit;
    end;
  end;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -