encryption - funciona - md5 encrypt
MD5 es de 128 bits, pero ¿por qué tiene 32 caracteres? (7)
Un "carácter" hexadecimal (mordisco) es diferente de un "personaje"
Para ser claro en los bits vs byte, vs personajes.
- 1 byte es de 8 bits (para nuestros propósitos)
- 8 bits proporciona
2**8
combinaciones posibles: 256 combinaciones
Cuando miras un personaje hexadecimal,
- 16 combinaciones de
[0-9] + [af]
: el rango completo de0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
- 16 es menor que 256, por lo que un carácter hexadecimal no almacena 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 caracteres hexadecimales pueden almacenar 8 bits,
2**8
combinaciones. - Un byte representado como un carácter hexadecimal es
[0-9a-f][0-9a-f]
y eso representa las dos partes de un byte (llamamos a un medio byte un nibble ). En este orden, en realidad depende de la plataforma o de la plataforma:0F
puede representar00001111
o11110000
.
Cuando miras a un personaje regular,
- Puede almacenar más de 16 combinaciones.
- Las capacidades del personaje están determinadas por la codificación. Por ejemplo, el ISO 8859-1 que almacena un byte completo, almacena todas estas cosas
- Todo eso lleva el rango completo de
2**8
. - Si un carácter hexadecimal en un
md5()
pudiera almacenar todo eso, vería 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 pestañas) y control personajes (que ni siquiera puedes ver 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.
Leí algunos documentos sobre md5, decía que eran 128 bits, pero ¿por qué son 32 caracteres? No puedo calcular los personajes.
- 1 byte es 8 bits
- si 1 caracter es 1 byte
- entonces 128 bits es 128/8 = 16 bytes ¿verdad?
EDITAR:
SHA-1 produce 160 bits, ¿cuántos caracteres hay?
32 caracteres como representación hexadecimal, eso es 2 caracteres por byte.
En realidad no son personajes, son dígitos hexadecimales.
Eso es 32 caracteres hexadecimales - 1 carácter hexadecimal es 4 bits.
Esos son dígitos hexadecimales, no caracteres. Un dígito = 4 bits.
MD5 produce dígitos hexadecimales (0-15 / 0-F), por lo que son cuatro bits cada uno. 128/4 = 32 caracteres.
SHA-1 produce dígitos hexadecimales también (0-15 / 0-F), entonces 160/4 = 40 caracteres.
(Debido a que son operaciones matemáticas, la mayoría de las funciones de hash se suelen representar como dígitos hexadecimales).
Probablemente estabas pensando en caracteres de texto ASCII, que son 8 bits.
Quería summerize algunas de las respuestas en una publicación.
Primero, no pienses 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.
Tomando eso más adelante, un byte u ocho bits están representados por dos dígitos hexadecimales, por ejemplo, b '' 1111 1111
'' = 0xFF
= 255
.
Los hashes MD5 tienen 128 bits de longitud 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 de hash puede ser uno de un conjunto predeterminado. Entonces SHA-512 puede ser representado por 128 dígitos hexadecimales.
De nuevo, esta publicación solo se basa en respuestas anteriores.