J'ai lu des documents sur md5, il a dit que ses 128 bits, mais pourquoi est-ce 32 caractères? Je ne peux pas calculer les caractères.
- 1 octet équivaut à 8 bits
- si 1 caractère vaut 1 octet
- alors 128 bits est 128/8 = 16 octets non?
ÉDITER:
SHA-1 produit 160 bits, alors combien de caractères y a-t-il?
hash
cryptography
md5
cryptographic-hash-function
hash_jr90
la source
la source
((1 << (n*4))-1).bit_length()
où n est la longueur du hachage en hexadécimalRéponses:
32 caractères sous forme de représentation hexadécimale, soit 2 caractères par octet.
la source
Je voulais résumer certaines des réponses dans un seul post.
Tout d'abord, ne considérez pas le hachage MD5 comme une chaîne de caractères mais comme un nombre hexadécimal. Par conséquent, chaque chiffre est un chiffre hexadécimal (0-15 ou 0-F) et représente quatre bits et non huit.
En allant plus loin, un octet ou huit bits sont représentés par deux chiffres hexadécimaux, par exemple b '
1111 1111
' =0xFF
=255
.Les hachages MD5 ont une longueur de 128 bits et sont généralement représentés par 32 chiffres hexadécimaux.
Les hachages SHA-1 ont une longueur de 160 bits et sont généralement représentés par 40 chiffres hexadécimaux.
Pour la famille SHA-2, je pense que la longueur de hachage peut faire partie d'un ensemble prédéterminé. Ainsi, SHA-512 peut être représenté par 128 chiffres hexadécimaux.
Encore une fois, cet article est simplement basé sur les réponses précédentes.
la source
Un "caractère" hexadécimal (grignotage) est différent d'un "caractère"
Pour être clair sur les bits vs octet, vs caractères.
2**8
des combinaisons possibles: 256 combinaisonsLorsque vous regardez un caractère hexadécimal,
[0-9] + [a-f]
: la gamme complète de0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
2**4
: cela signifie qu'un caractère hexadécimal peut stocker 4 bits dans un octet (un demi-octet).2**8
combinaisons.[0-9a-f][0-9a-f]
et qui représente les deux moitiés d'un octet (nous appelons un demi-octet un quartet ).Lorsque vous regardez un caractère ordinaire à un octet, (nous allons totalement ignorer les caractères multi-octets et larges ici)
2**8
gamme.md5()
pouvait stocker tout cela, vous verriez toutes les lettres minuscules, toutes les lettres majuscules, toute la ponctuation et des choses comme¡°ÀÐàð
, des espaces comme (nouvelles lignes et tabulations) et des caractères de contrôle (ce que vous pouvez '' t même voir et dont beaucoup ne sont pas utilisés).Ils sont donc clairement différents et j'espère que cela fournira la meilleure ventilation des différences.
la source
MD5 donne des chiffres hexadécimaux (0-15 / 0-F), donc ils sont de quatre bits chacun. 128/4 = 32 caractères.
SHA-1 donne également des chiffres hexadécimaux (0-15 / 0-F), donc 160/4 = 40 caractères.
(Puisqu'il s'agit d'opérations mathématiques, la sortie de la plupart des fonctions de hachage est généralement représentée sous forme de chiffres hexadécimaux.)
Vous pensiez probablement aux caractères de texte ASCII, qui sont de 8 bits.
la source
Cela fait 32 caractères hexadécimaux - 1 caractère hexadécimal correspond à 4 bits.
la source
Ce sont des chiffres hexadécimaux, pas des caractères. Un chiffre = 4 bits.
la source
Ce ne sont pas en fait des caractères, ce sont des chiffres hexadécimaux.
la source
Un chiffre hexadécimal = 1 quartet (quatre bits)
Deux chiffres hexadécimaux = 1 octet (huit bits)
MD5 = 32 chiffres hexadécimaux
32 chiffres hexadécimaux = 16 octets (32/2)
16 octets = 128 bits (16 * 8)
La même chose s'applique à SHA-1, sauf qu'il comporte 40 chiffres hexadécimaux.
J'espère que ça aide.
la source