MD5-это 128 бит, но почему это 32 символа?
Я читал некоторые документы о md5, он сказал, что его 128 бит, но почему это 32 символа? Я не могу вычислить символы.
- 1 байт - это 8 бит
- если 1 символ-1 байт
- тогда 128 бит-это 128/8 = 16 байт правильно?
EDIT:
SHA-1 создает 160 бит, так сколько персонажей?
7 ответов:
Я хотел summerize некоторые из ответов в один пост.
во-первых, не думайте о хэше MD5 как о символьной строке, а как о шестнадцатеричном числе. Поэтому каждая цифра является шестнадцатеричной (0-15 или 0-F) и представляет собой четыре бита, а не восемь.
принимая это далее, один байт или восемь битов представлены двумя шестнадцатеричными цифрами, например b'
1111 1111
'=0xFF
=255
.MD5 хэши 128 бит в длину и, как правило, представлены 32 hex десятичные знаки.
хэши SHA-1 имеют длину 160 бит и обычно представлены 40 шестнадцатеричными цифрами.
для семейства SHA-2, я думаю, что длина хэша может быть одним из заранее определенного набора. Таким образом, SHA-512 может быть представлен 128 шестнадцатеричными цифрами.
опять же, этот пост просто на основе предыдущих ответов.
MD5 дает шестнадцатеричные цифры (0-15 / 0-F), так что они по четыре бита каждый. 128 / 4 = 32 символа.
SHA-1 также дает шестнадцатеричные цифры (0-15 / 0-F), поэтому 160 / 4 = 40 символов.
(поскольку они являются математическими операциями, вывод большинства функций хэширования обычно представляется в виде шестнадцатеричных цифр.)
вы, вероятно, думали о текстовых символах ASCII, которые составляют 8 бит.
шестнадцатеричный " символ "(клев) отличается от"символа"
чтобы быть ясным на битах против байта, против символов.
- 1 байт-это 8 бит (для наших целей)
- 8 бит обеспечивает
2**8
возможные комбинации: 256 комбинацийкогда вы смотрите на шестнадцатиричный символ,
- 16 комбинаций
[0-9] + [a-f]
: весь ассортимент0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
- 16 меньше чем 256, поэтому одно один шестнадцатеричный символ делает не хранить байт.
- 16 составляет
2**4
: это означает, что один шестнадцатеричный символ может хранить 4 бита в байте (полбайта).- таким образом, два шестнадцатеричных символа, могут хранить 8 бит,
2**8
комбинаций.- байт, представленный в виде шестнадцатеричного символа
[0-9a-f][0-9a-f]
и это представляет обе половины байта (мы называем полбайта a клев). В каком порядке на самом деле зависит от спецификации или платформы:0F
может представлять либо00001111
или11110000
.когда вы смотрите на обычный однобайтовый символ, (мы полностью собираемся пропустить многобайтовые и широкие символы здесь)
- он может хранить гораздо больше, чем 16 комбинаций.
- возможности символ определяется кодировка. например,ISO 8859-1, который хранит весь байт, хранит все это
- все этот материал занимает весь