Leí algunos documentos sobre md5, decía que son 128 bits, pero ¿por qué son 32 caracteres? No puedo calcular los caracteres.
- 1 byte son 8 bits
- si 1 carácter es 1 byte
- entonces 128 bits es 128/8 = 16 bytes, ¿verdad?
EDITAR:
SHA-1 produce 160 bits, entonces, ¿cuántos caracteres hay?
hash
cryptography
md5
cryptographic-hash-function
hash_jr90
fuente
fuente
((1 << (n*4))-1).bit_length()
donde n es la longitud del hash en hexadecimalRespuestas:
32 caracteres como representación hexadecimal, eso es 2 caracteres por byte.
fuente
Quería resumir algunas de las respuestas en una publicación.
Primero, no piense en el hash MD5 como una cadena de caracteres, 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.
Yendo más allá, un byte u ocho bits están representados por dos dígitos hexadecimales, por ejemplo, b '
1111 1111
' =0xFF
=255
.Los hash MD5 tienen una longitud de 128 bits y generalmente están representados por 32 dígitos hexadecimales.
Los hashes SHA-1 tienen 160 bits de longitud y generalmente están representados por 40 dígitos hexadecimales.
Para la familia SHA-2, creo que la longitud del hash puede ser una de un conjunto predeterminado. Entonces SHA-512 se puede representar con 128 dígitos hexadecimales.
Nuevamente, esta publicación se basa solo en respuestas anteriores.
fuente
Un "carácter" hexadecimal (nibble) es diferente de un "carácter"
Para ser claros en los bits frente a bytes, frente a caracteres.
2**8
combinaciones posibles: 256 combinacionesCuando miras un carácter hexadecimal,
[0-9] + [a-f]
: la gama completa de0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
2**4
: eso significa que un carácter hexadecimal puede almacenar 4 bits en un byte (medio byte).2**8
combinaciones de 8 bits .[0-9a-f][0-9a-f]
y que representa las dos mitades de un byte (a un medio byte lo llamamos nibble ).Cuando observa un carácter normal de un solo byte, (aquí vamos a omitir totalmente los caracteres de varios bytes y los caracteres anchos)
2**8
gama.md5()
pudiera almacenar todo eso, verías todas las letras minúsculas, todas las letras mayúsculas, toda la puntuación y cosas como¡°ÀÐàð
espacios en blanco como (líneas nuevas y tabulaciones) y caracteres de control (que puedes ' ni siquiera veo y muchos de los cuales no están en uso).Entonces son claramente diferentes y espero que eso proporcione el mejor desglose de las diferencias.
fuente
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 salida de la mayoría de las funciones hash se representa comúnmente como dígitos hexadecimales).
Probablemente estaba pensando en caracteres de texto ASCII, que son de 8 bits.
fuente
Eso es 32 caracteres hexadecimales: 1 carácter hexadecimal son 4 bits.
fuente
Esos son dígitos hexadecimales, no caracteres. Un dígito = 4 bits.
fuente
En realidad, no son caracteres, son dígitos hexadecimales.
fuente
Un dígito hexadecimal = 1 nibble (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 hexadecimales.
Espero que esto ayude.
fuente