2010-11-25 8 views
11

Si j'ai une chaîne de 32 caractères (un hachage MD5) et que je l'code en Base64, quelle est la longueur maximale de la chaîne codée?Codage MD5 Hash et Base64

+5

Si vous avez une chaîne de 32 caractères qui est un hachage MD5 alors il est déjà codé en hexadécimal et il n'est pas nécessaire de l'encoder en base64. –

+1

Un hachage MD5 n'est pas hexadécimal! C'est 16 octets - hexadécimal est simplement une représentation conventionnelle. –

+2

@GregS, vous avez raison de dire qu'un hachage MD5 est généralement représenté sous forme hexadécimale, qui est un sous-ensemble de Base64. Mais il y a un but à convertir en Base64 - Base64 prend moins de caractères parce qu'il a un jeu de caractères plus grand. Cela vous permettra d'économiser de l'espace disque lorsque vous sauvegarderez en texte brut ou un schéma de codage de caractères si vous utilisez la notation Base64 (22 caractères) plutôt que la notation hexadécimale (32 caractères). –

Répondre

31

Une valeur MD5 est toujours 22 caractères (utiles) long en notation Base64. De nombreux algorithmes Base64 ajoutent également 2 caractères de remplissage lors de l'encodage d'un hachage MD5, ce qui porte le total à 24 caractères. Le rembourrage n'ajoute aucune information utile et peut être supprimé. Seuls les 22 premiers caractères comptent.

Voici pourquoi:

Un hachage MD5 est une valeur de 128 bits. Chaque caractère dans une chaîne Base64 contient 6 bits d'information, car il y a 64 valeurs possibles pour le caractère, et il faut 6 puissances de 2 pour atteindre 64. Avec 6 bits d'information dans chaque caractère, 21 caractères ont 126 bits d'information, et 22 caractères contient 132 bits d'information. Etant donné que 128 bits ne peuvent pas contenir plus de 21 caractères mais qu'ils ne dépassent pas 22 caractères (avec un peu de place), une valeur de 128 bits sera toujours représentée par 22 caractères en Base64.

Une note sur le rembourrage:

je l'ai mentionné ci-dessus que de nombreux algorithmes d'encodage base64 ajouter quelques caractères de remplissage lors de l'encodage d'une valeur MD5. C'est parce que Base64 représente 3 octets d'information en tant que 4 caractères. Puisque MD5 a 16 octets d'information, de nombreux algorithmes de codage Base64 ajoutent "==" pour indiquer que l'entrée de 16 octets était de 2 octets en-deçà du multiple suivant de 3, qui aurait été de 18 octets. Ces 2 signes égaux n'ajoutent aucune information à la chaîne et peuvent être mis au rebut lors du stockage.

7

Selon http://en.wikipedia.org/wiki/Base64

« A noter que, étant donné une entrée de n octets, la sortie est (n + 2 - ((n + 2)% 3))/3 * 4 octets de long, qui converge vers n * 4/3 ou 1.33333n pour grand n. " Ainsi, ce sera ((32 + 2 - (32 + 2)% 3))/3 * 4 = 34 - (34% 3)/3 * 4 = (34 - 1)/3 * 4 = 33/3 * 4 = 44 caractères.

Vous pouvez toujours l'extraire sous forme brute binaire (128 bits) et l'encoder directement dans la base 64, ce qui signifie convertir 16 octets au lieu de 32, qui devient 24 octets lorsque la base 64 est codée.

+5

Un hachage md5 est de 128 bits, ce qui permettrait d'encoder 24 caractères de base64. –

+0

Merci Arantor! Réponse parfaite! –

+0

@ GregS, désolé, oui, je pensais à SHA1 qui est de 160 bits. – Arantor