Вопрос

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

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

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

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

Это было полезно?

Решение

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

Другие советы

Я хотел, чтобы Summerize некоторые ответы в один пост.

Во -первых, не думайте о хэш 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 is 2**4: Это означает, что один шестнадцатеричный персонаж может хранить 4 бита в байте (половина байта).
  • Поэтому два шестнадцатеричных персонажа могут хранить 8 бит, 2**8 Комбинации.
  • Байт, представленный как шестнадцатеричный персонаж [0-9a-f][0-9a-f] и это представляет обе половины байта (мы называем полу-байт заклинание).

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

  • Он может хранить гораздо более 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 бит.

Это 32 шестнадцатеричного персонажа - 1 шестнадцатеричный персонаж - 4 бита.

Это шестигранные цифры, а не персонажи. Одна цифра = 4 бита.

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

Одна шестнадцатеричная цифра = 1 заклинание (четыре бита)

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

MD5 = 32 шестигранные цифры

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top