Подтвердить что ты не робот

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

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

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

EDIT:

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

4b9b3361

Ответ 1

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

Ответ 2

Я хотел, чтобы некоторые ответы были изложены в одном сообщении.

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

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

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

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

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

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

Ответ 3

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

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

  • 1 байт равен 8 битам (для наших целей)
  • 8 бит обеспечивают 2**8 возможных комбинаций: 256 комбинаций

Когда вы смотрите на шестнадцатеричный символ,

  • 16 комбинаций [0-9] + [af]: полный диапазон 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] и это представляет обе половины байта (мы называем полубайт байтом).

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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