Я читал документы о md5, там говорилось, что это 128 бит, но почему 32 символа? Я не могу вычислить персонажей.
- 1 байт равен 8 битам
- если 1 символ равен 1 байту
- тогда 128 бит - это 128/8 = 16 байт, верно?
РЕДАКТИРОВАТЬ:
SHA-1 дает 160 бит, так сколько же там символов?
hash
cryptography
md5
cryptographic-hash-function
hash_jr90
источник
источник
((1 << (n*4))-1).bit_length()
где n - длина хеша в шестнадцатеричном форматеОтветы:
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] + [a-f]
: полный спектр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 бита.
источник
На самом деле это не символы, это шестнадцатеричные цифры.
источник
Одна шестнадцатеричная цифра = 1 полубайт (четыре бита)
Две шестнадцатеричные цифры = 1 байт (восемь бит)
MD5 = 32 шестнадцатеричных цифры
32 шестнадцатеричных цифры = 16 байтов (32/2)
16 байт = 128 бит (16 * 8)
То же самое относится к SHA-1, за исключением того, что он состоит из 40 шестнадцатеричных цифр.
Надеюсь, это поможет.
источник