Ответ 1
32 символа в виде шестнадцатеричного представления, то есть 2 символа на каждый байт.
Я прочитал несколько документов о md5, он сказал, что его 128 бит, но почему это 32 символа? Я не могу вычислить символы.
EDIT:
SHA-1 создает 160 бит, так сколько символов есть?
32 символа в виде шестнадцатеричного представления, то есть 2 символа на каждый байт.
Я хотел, чтобы некоторые ответы были изложены в одном сообщении.
Во-первых, не думайте о хеше MD5 как о символьной строке, а как о шестнадцатеричном. Поэтому каждая цифра представляет собой шестую цифру (0-15 или 0-F) и представляет четыре бита, а не восемь.
Принимая во внимание, что один байт или восемь бит представлены двумя шестнадцатеричными цифрами, например. b '1111 1111
' = 0xFF
= 255
.
Хеши MD5 имеют длину 128 бит и обычно представлены 32 шестнадцатеричными цифрами.
Хеши SHA-1 имеют длину 160 бит и обычно представлены 40 шестнадцатеричными цифрами.
Для семейства SHA-2, я думаю, длина хэша может быть одним из заранее определенных множеств. Таким образом, SHA-512 может быть представлен 128 шестнадцатеричными цифрами.
Опять же, этот пост основан только на предыдущих ответах.
Чтобы было понятно, биты против байта, против символов.
2**8
возможных комбинаций: 256 комбинацийКогда вы смотрите на шестнадцатеричный символ,
[0-9] + [af]
: полный диапазон 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
2**4
: это означает, что один шестнадцатеричный символ может хранить 4 бита в байте (полбайта).2**8
комбинаций.[0-9a-f][0-9a-f]
и это представляет обе половины байта (мы называем полубайт байтом).Когда вы смотрите на обычный однобайтовый символ (здесь мы полностью пропустим многобайтовые и широкие символы)
2**8
.md5()
мог хранить все это, вы бы увидели все строчные буквы, все заглавные буквы, все знаки пунктуации и такие вещи, как ¡°ÀÐàð
, пробел, как (переводы строк и табуляции) и контроль персонажи (которых вы даже не видите и многие из которых не используются).Так что они явно разные, и я надеюсь, что это поможет лучше понять различия.
MD5 дает шестнадцатеричные цифры (0-15/0-F), поэтому они равны по четыре бита. 128/4 = 32 символа.
SHA-1 также дает шестнадцатеричные цифры (0-15/0-F), поэтому 160/4 = 40 символов.
(Поскольку они являются математическими операциями, большинство выходных функций хеширования обычно обозначаются как шестнадцатеричные цифры.)
Вероятно, вы думали о текстовых символах ASCII, которые являются 8 бит.
Это 32 шестнадцатеричных символа - 1 шестнадцатеричный символ - 4 бита.
Это шестнадцатеричные цифры, а не символы. Одна цифра = 4 бит.
Они на самом деле не символы, они шестнадцатеричные цифры.