MD5-это 128 бит, но почему это 32 символа?
Я читал некоторые документы о md5, он сказал, что его 128 бит, но почему это 32 символа? Я не могу вычислить символы.
- 1 байт — это 8 бит
- если 1 символ-1 байт
- тогда 128 бит-это 128/8 = 16 байт правильно?
SHA-1 создает 160 бит, так сколько персонажей?
7 ответов
32 символа как шестнадцатеричное представление, это 2 символа на байт.
Я хотел собрать описание ответы на некоторые вопросы в одном посте.
во-первых, не думайте о хэше MD5 как о символьной строке, а как о шестнадцатеричном числе. Поэтому каждая цифра является шестнадцатеричной (0-15 или 0-F) и представляет собой четыре бита, а не восемь.
принимая это дальше, один байт или восемь бит представлены двумя шестнадцатеричными цифрами, например b’ 1111 1111 ‘ = 0xFF = 255 .
MD5 хэши имеют длину 128 бит и обычно представлены 32 шестнадцатеричными десятичные знаки.
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] и это представляет обе половины байта (мы называем полбайта клев). В каком порядке на самом деле зависит от спецификации или платформы: 0F может представлять либо 00001111 или 11110000 .
когда вы смотрите на обычный однобайтовый символ, (мы полностью собираемся пропустить многобайтовые и широкие символы здесь)