Eu li alguns documentos sobre md5, dizia que são 128 bits, mas por que são 32 caracteres? Não consigo calcular os caracteres.
- 1 byte é 8 bits
- se 1 caractere for 1 byte
- então 128 bits é 128/8 = 16 bytes, certo?
EDITAR:
O SHA-1 produz 160 bits, então quantos caracteres existem?
hash
cryptography
md5
cryptographic-hash-function
hash_jr90
fonte
fonte
((1 << (n*4))-1).bit_length()
onde n é o comprimento do hash em hexadecimalRespostas:
32 caracteres como representação hexdecimal, ou seja, 2 caracteres por byte.
fonte
Eu queria resumir algumas das respostas em um post.
Primeiro, não pense no hash MD5 como uma string de caracteres, mas como um número hexadecimal. Portanto, cada dígito é um dígito hexadecimal (0-15 ou 0-F) e representa quatro bits, não oito.
Indo além, um byte ou oito bits são representados por dois dígitos hexadecimais, por exemplo, b '
1111 1111
' =0xFF
=255
.Os hashes MD5 têm 128 bits de comprimento e geralmente são representados por 32 dígitos hexadecimais.
Os hashes SHA-1 têm 160 bits de comprimento e geralmente são representados por 40 dígitos hexadecimais.
Para a família SHA-2, acho que o comprimento do hash pode ser um de um conjunto pré-determinado. Portanto, o SHA-512 pode ser representado por 128 dígitos hexadecimais.
Novamente, esta postagem é baseada apenas em respostas anteriores.
fonte
Um "personagem" hexadecimal (nibble) é diferente de um "personagem"
Para ser claro quanto aos bits vs bytes, vs caracteres.
2**8
combinações possíveis: 256 combinaçõesQuando você olha para um personagem hexadecimal,
[0-9] + [a-f]
: a gama completa de0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
2**4
: isso significa que um caractere hexadecimal pode armazenar 4 bits em um byte (meio byte).2**8
combinações de 8 bits .[0-9a-f][0-9a-f]
e que representa as duas metades de um byte (chamamos meio byte de nibble ).Quando você olha para um caractere regular de byte único, (vamos pular totalmente os caracteres multibyte e largos aqui)
2**8
gama.md5()
pudesse armazenar tudo isso, você veria todas as letras minúsculas, todas as letras maiúsculas, toda a pontuação e coisas como¡°ÀÐàð
, espaços em branco como (novas linhas e tabulações) e caracteres de controle (que você pode ' nem mesmo vejo e muitos dos quais não estão em uso).Portanto, eles são claramente diferentes e espero que forneça o melhor detalhamento das diferenças.
fonte
MD5 produz dígitos hexadecimais (0-15 / 0-F), portanto, eles têm quatro bits cada. 128/4 = 32 caracteres.
SHA-1 também produz dígitos hexadecimais (0-15 / 0-F), então 160/4 = 40 caracteres.
(Como são operações matemáticas, a saída da maioria das funções de hash é comumente representada como dígitos hexadecimais.)
Você provavelmente estava pensando em caracteres de texto ASCII, que são de 8 bits.
fonte
São 32 caracteres hexadecimais - 1 caractere hexadecimal tem 4 bits.
fonte
Um dígito hexadecimal = 1 nibble (quatro bits)
Dois dígitos hexadecimais = 1 byte (oito bits)
MD5 = 32 dígitos hexadecimais
32 dígitos hexadecimais = 16 bytes (32/2)
16 bytes = 128 bits (16 * 8)
O mesmo se aplica ao SHA-1, exceto que possui 40 dígitos hexadecimais.
Eu espero que isso ajude.
fonte
Esses são dígitos hexadecimais, não caracteres. Um dígito = 4 bits.
fonte
Eles não são realmente caracteres, são dígitos hexadecimais.
fonte