如何生成所需大小(示例8096)的长位哈希码- c#

本文关键字:哈希码 8096 示例 何生成 | 更新日期: 2023-09-27 17:50:15

有许多哈希方法,但我想用8096位长组成位哈希。这有可能实现吗?

例如,当我输入"House"时,我应该得到这样的字符串:

"0101010001010101..." (8096 bits)

我怎么能做到这一点(使用c# 4.0是可以的)?

如果你想知道我为什么需要这样的东西,我需要它来比较签名文件&向量空间模型。

如何生成所需大小(示例8096)的长位哈希码- c#

对于快速的非加密哈希,您可以检查FNV族。通过仔细和适当的修改,您应该能够构建一个8096位的散列,并且速度相当快。

如果速度不是主要考虑的问题,而是简单性和质量,那么你可以简单地使用MD5的变体来生成非加密哈希。

Hash(x) = MD5(0 || x) || MD5(1 || x)…MD5 (62 | | x) | | MD5 (63 | | x) & lt; 32祝辞,在"| |";是连接操作,只使用最后哈希的低阶32位,将给你一个8096位的哈希。

编辑

下面是展示MD5概念的小代码示例:

using System;
using System.Security.Cryptography;
using System.Text;
namespace Hash8096
{
    class MainClass
    {
        public static byte [] H8096(byte [] x) {
            byte [] Result = new byte[8096 / 8];
            byte [] Xplus1 = new byte[x.Length + 1];
            x.CopyTo(Xplus1, 1);
            int ResultOffset = 0;
            int AmountLeft = Result.Length;
            for (int i=0; i<64; i++) {
                // do MD5(i || x)
                var md5 = MD5.Create();
                Xplus1[0] = (byte) i;
                var hash = md5.ComputeHash(Xplus1);
                int NumToCopy = Math.Min(hash.Length, AmountLeft);
                Array.Copy(hash, 0, Result, ResultOffset,NumToCopy);
                ResultOffset += NumToCopy;
                AmountLeft -= NumToCopy;
            }
            return Result;
        }
        public static void Main (string[] args)
        {
            byte [] x = Encoding.UTF8.GetBytes("Hello World!");
            byte [] MonsterHash = H8096(x);
            Console.WriteLine ("Monster hash in hex follows:");
            Console.WriteLine(BitConverter.ToString(MonsterHash));
        }
    }
}