Pourquoi un Hachage SHA-1, 40 caractères si elle n'est que de 160 bits?
Le titre de la question dit tout. J'ai fait des recherches sur SHA-1 et la plupart des endroits, je le vois de 40 Caractères hexadécimaux de long, qui pour moi est 640bit. Pourrait-il ne pas être représentés aussi bien avec seulement 10 caractères hexadécimaux 160bit = 20byte. Et d'un hex caractère peut représenter 2 octets de droite? Pourquoi est-il deux fois plus longtemps que nécessaire? Ce qui me manque dans ma compréhension.
Et ne pouvait pas un SHA-1, même juste 5 ou moins de caractères si vous utilisez Base32 ou Base36 ?
Vous devez vous connecter pour publier un commentaire.
D'un hex personnage peut ne représentent que 16 valeurs différentes, c'est à dire 4 bits. (16 = 24)
40 × 4 = 160.
Et non, vous avez besoin de beaucoup plus de 5 caractères en base 36.
Il ya tout à fait 2160 différentes SHA-1 hash.
2160 = 1640, donc c'est une autre raison pourquoi nous avons besoin de 40 chiffres hexadécimaux.
Mais 2160 = 36160 log362 = 3630.9482..., si vous avez encore besoin de 31 caractères à l'aide de base-36.
4.3e9
Je pense que l'OP est la confusion vient d'une chaîne représentant un hash SHA1 prend 40 octets (au moins si vous utilisez des caractères ASCII), qui est égal à 320 bits (pas de 640 bits).
La raison en est que le hachage est en binaire et la chaîne hexadécimale est juste un codage de que. Donc, si vous avez été à l'utilisation d'un codage efficace (ou pas de l'encodage à tous), vous pouvez prendre seulement 160 bits de l'espace (20 octets), mais le problème c'est de ne pas être binaire coffre-fort.
Vous pouvez utiliser base64 bien que, dans ce cas, vous auriez besoin d'environ 27-28 octets (ou caractères) au lieu de 40 (voir cette page).
Il y a deux caractères hexadécimaux par 8-bit, octet, pas deux octets par caractère hex.
Si vous travaillez avec des octets de 8 bits (comme dans l'algorithme SHA-1 définition), puis un hex de caractères code pour une seule haute ou basse de 4 bits grignoter à l'intérieur d'un octet. Donc, il faut deux personnages pour un plein d'octets.
2 caractères hexadécimaux mak en place une gamme de 0 à 255, c'est à dire 0x00 == 0 et 0xFF == 255. Donc 2 caractères hexadécimaux sont 8 bits, ce qui rend 160 bits pour votre condensé SHA.
SHA-1 est de 160 bits
Qui se traduit par 20 octets = 40 caractères hexadécimaux (2 caractères hexadécimaux par octet)
Ma réponse ne se distingue des précédents dans ma théorie sur l'origine EXACTE de l'OP, de la confusion, et les étapes de bébé-je fournir pour l'élucidation.
Un caractère prend différents nombres d'octets selon le codage utilisé (voir ici). Il y a quelques contextes de ces jours quand on utilise 2 octets par caractère, par exemple lors de la programmation en Java (voici pourquoi). Ainsi, 40 Java personnages serait égal à 80 octets = 640 bits, les OP du calcul, et 10 Java personnages serait en effet encapsuler la bonne quantité de l'information pour un hachage SHA-1.
Contrairement aux milliers de Java caractères, cependant, il ya seulement 16 caractères hexadécimaux, à savoir 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E et F. Mais ce ne sont pas les mêmes que Java caractères, et prennent beaucoup moins d'espace que les codages de la Java des caractères de 0 à 9 et A à F. Ils sont des symboles signifiant toutes les valeurs possibles représentés par seulement 4 bits:
Ainsi, chaque hex personnage est à seulement un demi-octet, et 40 caractères hexadécimaux nous donne 20 octets = 160 bits, la longueur de hachage SHA-1.