MD5-это 128 бит, но почему это 32 символа?


Я читал некоторые документы о md5, он сказал, что его 128 бит, но почему это 32 символа? Я не могу вычислить символы.

  • 1 байт - это 8 бит
  • если 1 символ-1 байт
  • тогда 128 бит-это 128/8 = 16 байт правильно?

EDIT:

SHA-1 создает 160 бит, так сколько персонажей?

7 63

7 ответов:

32 символа в шестнадцатеричном представлении, это 2 символа на байт.

Я хотел 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.

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

это 32 шестнадцатеричных символа - 1 шестнадцатеричный символ составляет 4 бита.

Это шестнадцатеричные цифры, а не символы. Одна цифра = 4 бита.

на самом деле это не символы, а шестнадцатеричные цифры.