Какой набор символов используют хеш-функции (например, MD5, SHA)

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

... Я хотел бы знать, какая база символов ... или как именно она с базой символов, которая используется в хеш-функциях, таких как MD5, SHA ... например ... что они используют base64, ascii, расширенный ascii... потому что, если я попытаюсь закодировать, например, char alt 444 (╝), он закодирует его... но должно быть право ограничения, сколько безразличных символов можно использовать... потому что иначе хэш не мог бы быть уникальным, не так ли? И многие сайты, использующие эти алгоритмы, позволяют использовать только пул символов base64... Я думаю... пожалуйста, помогите... спасибо


person trollington2    schedule 13.05.2017    source источник


Ответы (1)


Алгоритмы хеширования берут кучу байтов, вычисляют хэш и возвращают предопределенное количество байтов. Поэтому для них не имеет значения, является ли ввод коротким закодированным текстом или большим двоичным файлом.

То, как строка преобразуется в массив байтов, зависит от реализации хеш-функции и среды программирования. Пока это всегда делается одинаково, хэши будут сопоставимы. Если вам нужен кроссплатформенный хэш, рекомендуется сначала преобразовать строку в массив байтов (предпочтительно в кодировке UTF-8), а затем передать ее в хэш.

Вывод часто представляет собой шестнадцатеричное представление хеша, но иногда вы также можете запросить двоичный вывод.

Пример с SHA-256

SHA256("hello") = "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
  • Возвращает 32 байта, что соответствует 256 битам, отсюда и название SHA-256.
  • 32 байта закодированы в шестнадцатеричном формате, каждый байт представлен в виде шестнадцатеричного числа с двумя символами (2c означает один байт с числом 44).
person martinstoeckli    schedule 14.05.2017
comment
хорошо, я так понимаю, вы должны знать пул символов, который использовался для кодирования, в данном случае UTF-8... спасибо - person trollington2; 14.05.2017