Pregunta

Leí algunos documentos sobre MD5, dijo que son 128 bits, pero ¿por qué son 32 caracteres? No puedo calcular los personajes.

  • 1 byte es 8 bits
  • Si 1 personaje es 1 byte
  • Entonces 128 bits es 128/8 = 16 bytes, ¿verdad?

EDITAR:

SHA-1 produce 160 bits, entonces, ¿cuántos personajes hay?

¿Fue útil?

Solución

32 caracteres como representación hexdecimal, eso es 2 caracteres por byte.

Otros consejos

Quería veranoizar algunas de las respuestas en una publicación.

Primero, no piense en el hash MD5 como una cadena de personajes sino como un número hexadecimal. Por lo tanto, cada dígito es un dígito hexadecimal (0-15 o 0-F) y representa cuatro bits, no ocho.

Llevando más allá, un byte u ocho bits están representados por dos dígitos hexagonales, por ejemplo, B '1111 1111' = 0xFF = 255.

Los hashes MD5 tienen 128 bits de longitud y generalmente representados por 32 dígitos hexagonales.

Los hashes SHA-1 tienen 160 bits de longitud y generalmente representados por 40 dígitos hexagonales.

Para la familia SHA-2, creo que la longitud del hash puede ser uno de un conjunto predeterminado. Entonces SHA-512 puede estar representado por 128 dígitos hexadecimales.

Nuevamente, esta publicación se basa en respuestas anteriores.

Un "personaje" hexadecimal (mordisco) es diferente de un "personaje"

Ser claro en los bits vs byte, vs personajes.

  • 1 byte es 8 bits (para nuestros propósitos)
  • 8 bits proporciona 2**8 Combinaciones posibles: 256 combinaciones

Cuando miras un personaje hexagonal,

  • 16 combinaciones de [0-9] + [a-f]: la gama completa de 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
  • 16 es menos de 256, por lo que un personaje hexagonal no almacenar un byte.
  • 16 es 2**4: Eso significa que un personaje hexadecimal puede almacenar 4 bits en un byte (medio byte).
  • Por lo tanto, dos personajes hexadecimales, pueden almacenar 8 bits, 2**8 combinaciones.
  • Un byte representado como un personaje hexadecimal es [0-9a-f][0-9a-f] y eso representa ambas medias de un byte (llamamos medio byte a picar).

Cuando miras un personaje regular de un solo byte, (Vamos a omitir totalmente a multi-byte y amplios personajes aquí)

  • Puede almacenar mucho más de 16 combinaciones.
  • Las capacidades del personaje están determinados por el codificación. Por ejemplo, el ISO 8859-1 que almacena un byte completo, almacena todo esto
  • Todo eso lleva todo 2**8 rango.
  • Si un personaje hexagonal en un md5() podría almacenar todo eso, vería todas las letras minúsculas, todas las letras mayúsculas, toda la puntuación y cosas como ¡°ÀÐàð, Whitespace como (nuevas líneas y pestañas) y personajes de control (que ni siquiera puede ver y muchos de los cuales no están en uso).

Por lo tanto, son claramente diferentes y espero que proporcione la mejor desglose de las diferencias.

MD5 produce dígitos hexadecimales (0-15 / 0-F), por lo que son cuatro bits cada uno. 128 /4 = 32 caracteres.

SHA-1 también produce dígitos hexadecimales (0-15 / 0-F), por lo que 160 /4 = 40 caracteres.

(Dado que son operaciones matemáticas, la producción de la mayoría de las funciones de hashing se representa comúnmente como dígitos hexadecimales).

Probablemente estabas pensando en caracteres de texto ASCII, que son 8 bits.

Eso es 32 personajes hexadecimales: 1 personaje hexadecimal es de 4 bits.

Esos son dígitos hexidecimales, no personajes. Un dígito = 4 bits.

En realidad no son personajes, son dígitos hexadecimales.

Un dígito hexadecimal = 1 picar (cuatro bits)

Dos dígitos hexadecimales = 1 byte (ocho bits)

MD5 = 32 dígitos hexadecimales

32 dígitos hexadecimales = 16 bytes (32/2)

16 bytes = 128 bits (16 * 8)

Lo mismo se aplica a SHA-1, excepto que tiene 40 dígitos hexagonales de largo.

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top