Как создать хэш-коды длинных битов желаемого размера (пример 8096) - C#
Существует много методов хеширования, но я хочу составить битовый хэш длиной 8096 бит. Можно ли этого добиться?
Например, когда я вхожу в "Дом", я должен получить строку вроде:
"0101010001010101..." (8096 bits)
Как я могу добиться этого (с помощью C# 4.0 в порядке)?
Если вам интересно, зачем мне такая вещь, она мне нужна для сравнения файлов сигнатур и модели векторного пространства.
1 ответ
Для быстрых некриптографических хэшей вы можете проверить семейство FNV. С помощью аккуратного и подходящего варианта вы сможете создать достаточно быстрый 8096-битный хеш.
Если скорость не является главной задачей, а простота и качество, то вы можете просто использовать вариант MD5 для создания некриптографического хэша.
Хеш (х) = MD5(0 || х) || MD5(1 || x) ... MD5(62 || x) || MD5(63 || x)<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));
}
}
}