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

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

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

РЕДАКТИРОВАТЬ:

SHA-1 выдает 160 битов, так сколько там символов?

9 ответов

Решение

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

Я хотел обобщить некоторые ответы в одном посте.

Во-первых, не думайте о хеше MD5 как о символьной строке, а как о шестнадцатеричном числе. Следовательно, каждая цифра является шестнадцатеричной (0-15 или 0-F) и представляет четыре бита, а не восемь.

Кроме того, один байт или восемь битов представлены двумя шестнадцатеричными цифрами, например, b'1111 1111знак равно 0xFF знак равно 255,

Хеши MD5 имеют длину 128 бит и обычно представлены 32 шестнадцатеричными цифрами.

Хэши SHA-1 имеют длину 160 битов и обычно представлены 40 шестнадцатеричными цифрами.

Я думаю, что для семейства SHA-2 длина хэша может быть одной из заранее определенных. Таким образом, SHA-512 может быть представлен 128 шестнадцатеричными цифрами.

Опять же, этот пост основан только на предыдущих ответах.

Шестнадцатеричный "персонаж" (клев) отличается от "персонажа"

Чтобы было понятно, биты против байта, против символов.

  • 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,

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

  • Он может хранить более 16 комбинаций.
  • Возможности персонажа определяются кодировкой. Например, ISO 8859-1, который хранит весь байт, хранит все эти вещи
  • Все это занимает весь 2**8 спектр.
  • Если шестнадцатеричный символ в md5() может хранить все это, вы увидите все строчные буквы, все заглавные буквы, все знаки пунктуации и тому подобное ¡°ÀÐàð, пробельные символы (новые строки и вкладки) и управляющие символы (которых вы даже не видите, и многие из которых не используются).

Так что они явно разные, и я надеюсь, что это поможет лучше понять различия.

MD5 дает шестнадцатеричные цифры (0-15 / 0-F), поэтому они имеют четыре бита каждая. 128 / 4 = 32 символа.

SHA-1 также дает шестнадцатеричные цифры (0-15 / 0-F), поэтому 160 / 4 = 40 символов.

(Поскольку это математические операции, вывод большинства хеш-функций обычно представляется в виде шестнадцатеричных цифр.)

Вы, вероятно, думали о текстовых символах ASCII, которые являются 8 битами.

Одна шестнадцатеричная цифра = 1 полубайт (четыре бита)

Две шестнадцатеричные цифры = 1 байт (восемь бит)

MD5 = 32 шестнадцатеричных цифры

32 шестнадцатеричных цифры = 16 байтов (32/2)

16 байт = 128 бит (16 * 8)

То же самое относится к SHA-1, за исключением того, что он состоит из 40 шестнадцатеричных цифр.

Надеюсь, это поможет.

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

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

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

Для ясности скопируйте 128-битное хеш-значение, рассчитанное с помощью MD5, в преобразователь двоичного кода в шестнадцатеричный и посмотрите длину шестнадцатеричного значения. Вы получите 32 шестнадцатеричных символа.

Другие вопросы по тегам