Question

J'ai lu quelques docs 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 est de 8 bits
  • si 1 caractère est 1 octet
  • puis 128 bits est 128/8 = 16 octets droit?

EDIT:

SHA-1 produit 160 bits, donc combien de caractères sont là?

Était-ce utile?

La solution

32 caractères que la représentation hexadécimale, qui est 2 caractères par octet.

Autres conseils

Je voulais summerize quelques-unes des réponses dans un poste.

Tout d'abord, ne pense pas du 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, huit pas.

Prise en outre que, un octet ou huit bits sont représentés par deux chiffres hexadécimaux, par exemple b'1111 1111 »= 0xFF = 255.

hachages MD5 de 128 bits de longueur et généralement représenté par 32 chiffres hexadécimaux.

SHA-1 hachages sont 160 bits de long et généralement représenté par 40 chiffres hexadécimaux.

Pour la famille SHA-2, je pense que la longueur de hachage peut être l'un d'un ensemble prédéterminé. Ainsi, SHA-512 peut être représenté par 128 chiffres hexadécimaux.

Encore une fois, ce post est simplement basée sur les réponses précédentes.

Un hex "caractère" (quartet) est différent d'un "caractère"

Pour être clair sur les bits vs octet, vs caractères.

  • 1 octet est de 8 bits (pour nos besoins)
  • 8 bits fournit 2**8 combinaisons possibles: 256 combinaisons

Quand vous regardez un caractère hexagonal,

  • 16 combinaisons de [0-9] + [a-f]: la gamme complète de 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
  • 16 est inférieur à 256, de sorte que l'un d'un caractère hexadécimal t pas stocker un octet.
  • 16 est 2**4:. Ce que des moyens d'un caractère hexadécimal peut stocker 4 bits dans un octet (un demi-octet)
  • Par conséquent, deux caractères hexadécimaux, peut stocker 8 bits, combinaisons de 2**8.
  • Un octet représenté comme un caractère hexagonal est [0-9a-f][0-9a-f] et qui représente les deux moitiés d'un octet (on appelle un demi-octet a grignotage ).

Quand vous regardez un régulière caractère simple octet, (nous sommes tout à fait d'aller sauter multi-octets et caractères larges ici)

  • Il peut stocker beaucoup plus de 16 combinaisons.
  • Les capacités du caractère sont déterminées par le encodage. Par exemple, le ISO 8859-1 qui stocke un octet entier, stocke tous ces trucs
  • Tout ça prend toute la gamme de 2**8.
  • Si un caractère hexagonal dans un md5() pourrait stocker tout cela, vous verriez toutes les lettres minuscules, toutes les lettres majuscules, tous les signes de ponctuation et des choses comme ¡°ÀÐàð, des espaces comme (nouvelle ligne et onglets), et des caractères de contrôle (que vous ne pouvez même pas voir et qui ne sont pas beaucoup d'utilisation).

Ils sont donc bien différentes et j'espère que fournit la meilleure ventilation des différences.

MD5 donne des chiffres hexadécimaux (0-15 / 0-F), de sorte qu'ils sont de quatre bits chacun. 128/4 = 32 caractères.

SHA-1 chiffres hexadécimaux rendements trop (0-15 / 0-F), de sorte que 160/4 = 40 caractères.

(car ils sont des opérations mathématiques, la production de la plupart des fonctions de hachage est généralement représentée comme chiffres hexadécimaux.)

Vous pensiez sans doute des caractères de texte ASCII, qui sont 8 bits.

C'est 32 caractères hexadécimaux - 1 caractère hexadécimal est de 4 bits.

Ce sont des chiffres hexadécimaux et non des caractères. Un chiffre = 4 bits.

Ils ne sont pas en fait des personnages, ils sont des chiffres hexadécimaux.

Un chiffre hexadécimal = 1 quartet (quatre bits )

Deux chiffres hex = 1 octet (huit bits)

MD5 = 32 chiffres hexadécimaux

32 chiffres hex = 16 octets (32/2)

16 octets = 128 bits (16 * 8)

Le même pour SHA-1 sauf que c'est 40 chiffres hexadécimaux longtemps.

J'espère que cette aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top