SlandShow
@SlandShow
70% of my body is made of movies.

Какой хэшкод является идейно верным?

Возник небольшой вопрос по поводу хеш-ций и вообще о хеш-коде.

Я знаю что такое хеш-функция и про её особенности (ну и про среды применения).
В моём понимании, такая функция принимает на вход аргумент и уже возвращает какое-то число. В зависимости от типа аргумента меняется и алгоритм вычисления. Но самый распространённый пример - это хеш от строки.

Т.е допустим:
// Return number
function hashcode(arg) {
...
}

hashcode("abracadabra");


И эта самая функция вернёт число. Ведь именно так можно использовать всевозможные хеш-таблицы и вследствие различные ассоциативные массивы на их основе (Там всякие Java HashMap'ы и т.д).

5a58a49604c28484731268.png

Но недавно на плюсах нашёл код, который генерирует от строки хеш-код N-го размера. И причём сам хеш-код не число, а символы. Вроде aVdxYYbs. Разве это не нарушает правила хеш-кода (что оный должен быть только числом)? Или я не прав?
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Mercury13
Программист на «си с крестами» и не только
Существуют так называемые криптографические хэши, задача которых — сделать, чтобы генерация двух документов с одинаковым хэшем была вычислительно невозможна. Если хэш удлиняется на два бита, эта задача усложняется, насколько мне известно, не вчетверо, а вдвое.

Потому криптографические хэши огромные (устаревший MD5 — 16 байтов, большинство современных — 32 или 64). Как его записать в БД, если и тип такой не всегда есть, а BLOB’ы — пальба из пушки по муравьям? Как-то закодировать в строчку. К тому же в вебе есть места, где двоичные данные не катят и без строчного кодирования никак (например, URL’ы).

Автор, очевидно, мэн из лагеря Perl/PHP и в дополнение к вычислению хэша взял и закодировал его. Вероятно, методом BASE64 (8 символов BASE64 соответствуют 6-байтовому хэшу). Для чего так кодировать обычные, не криптографические хэши — я вообще не знаю!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы