Хэш-функция для индексов больше 64 бит?

Из стандарта C++ хеш-функция std::tr1::hash вычисляет хеш-значения, диапазон которых составляет 64 бита (поправьте меня, если я ошибаюсь). Но из любопытства, существуют ли какие-либо механизмы, которые генерируют хеш-значения с диапазоном более 64 бит. Мой вопрос может показаться странным, поскольку вся используемая нами память находится в пределах 64-битного диапазона, но я хотел бы знать, как мы будем вычислять хеш-значение (скажем) размером 80 бит?

EDIT: Плохо, я предполагал 64-битные реализации.


person annunarcist    schedule 21.10.2013    source источник
comment
Вы должны определить свои собственные типы хеш-чисел (с 80 битами) и свои собственные хэш-функции. Я не уверен, что С++ 11 дает 64-битные хэши для 32-битных реализаций. Также обратите внимание на криптографические хэш-функции, такие как MD5 или SHA1.   -  person Basile Starynkevitch    schedule 21.10.2013
comment
Да, криптографические хеш-функции делают свою работу, но есть ли какие-либо некриптографические хэш-функции (а также стандартизированные), которые могут выполнять эту работу?   -  person annunarcist    schedule 21.10.2013
comment
Вы должны объяснить, зачем вам большие хэши... Зачем? Пожалуйста, объясните, почему хэш size_t вам не подходит!   -  person Basile Starynkevitch    schedule 21.10.2013
comment
поэтому мой тип ключа представляет собой массив символов без знака, который сам по себе является результатом криптографической функции. И я хочу избежать повторного вызова некриптовой хеш-функции (что в данном случае избыточно).   -  person annunarcist    schedule 22.10.2013


Ответы (1)


Различные хеш-функции в C++11 (которые, как я полагаю, соответствуют TR1) вычисляют хеш-значения в size_t, размер которых зависит от реализации (но будет 32-битным для 32-битной сборки и 64-битным для 64-битной сборки). немного сборки). Если вам нужен хэш большего размера, то вам придется вычислять его самостоятельно; возможно, вам даже придется определить более крупный интегральный тип для поддержки его вычисления. (Вы не можете вернуть 80-битный хэш-код в size_t, если size_t состоит только из 64 бит.)

person James Kanze    schedule 21.10.2013