Я использую алгоритм MD5 для хеширования ключа для хеш-таблицы на диске (я знаю, сомнительно, является ли это лучшим алгоритмом для этого, но я сейчас с ним разбираюсь. Проблема в том,обобщается на любой алгоритм, который создает массив байтов).Моя проблема заключается в следующем:
Размер хеш-кода определяет количество комбинаций (сегментов) в хеш-таблице.Поскольку MD5 128-битный, существует огромное количество комбинаций (~ 3.4e38), что слишком велико для моей цели.Итак, я хочу выделить первые n бит байтового массива, которые производит MD5, и преобразовать их в длинное (или ulong) значение.Поскольку MD5 создает массив байтов, это было бы легко сделать, если бы я хотел получить целое число байтов, но это приводит к слишком большому скачку числа комбинаций.Я считаю, что одно-битная версия намного сложнее.
Цель:
n = 10 // I.e. I want 2^10 combinations
long pos = someFcn(byte[] key, n)
где ключ - это хешируемое значение, а n - количество битов результата MD5, которые я хочу использовать.Тогда Pos будет целым числом от 0 до 1023 (в случае n = 10).Если n = 11, код будет от 0 до 2 ^ 11-1 = 2027 и т. Д. Должно быть несколько быстрым / эффективным.
Не кажется таким уж сложным, но это ускользает от меня.Любая помощь приветствуется.Благодарю.