Question

Si j'ai une chaîne de 32 caractères (un hachage MD5) et j'encoder à l'aide base64, ce qui est la longueur maximun de la chaîne encodée?

Était-ce utile?

La solution

Une valeur MD5 est toujours 22 (utiles) caractères en notation base64. De nombreux algorithmes base64 Ajoutera aussi 2 caractères de remplissage lors de l'encodage d'un hachage MD5, portant le total à 24 caractères. Le rembourrage ajoute aucune information utile et peut être mis au rebut. Seuls les 22 premiers caractères d'importance.

Voici pourquoi:

Un hachage MD5 est une valeur de 128 bits. Chaque caractère dans une chaîne base64 contient 6 bits d'information, parce qu'il ya 64 valeurs possibles pour le caractère, et il faut 6 puissances de 2 pour atteindre 64. Avec 6 bits d'information dans tous les caractères, 21 caractères a 126 bits d'information, et 22 caractères contient 132 bits d'information. Étant donné que 128 bits ne rentre pas dans les 21 caractères, mais ne forme dans les 22 caractères (avec une petite pièce de rechange), une valeur de 128 bits sera toujours représenté par 22 caractères base64.

Une note sur le rembourrage:

je l'ai mentionné ci-dessus que de nombreux algorithmes Base64 ajouter quelques caractères de remplissage lors de l'encodage d'une valeur MD5. En effet, base64 représente 3 octets d'informations 4 caractères. Depuis MD5 a 16 octets d'informations, de nombreux algorithmes Base64 append « == » pour désigner que l'entrée de 16 octets était de 2 octets court du multiple de 3, ce qui aurait été de 18 octets. Ces 2 signes égaux ajouter aucune information à la chaîne, et peut être mis au rebut lors de l'enregistrement.

Autres conseils

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

"Note que, étant donné une entrée de n octets, la sortie sera (n + 2 - ((n + 2) 3%)) / 3 * 4 octets de long, qui converge vers n * 4/3 ou 1.33333n pour n grand. "

Ainsi, il sera ((32 + 2 - (32 + 2)% 3)) / 3 * 4 = 34 - (34% 3) / 3 * 4 = (34 - 1) / 3 * 4 = 33/3 * 4 = 44 caractères.

On pourrait toujours l'extraire sous forme binaire brut (128 bits) et encoder directement dans la base 64, lesquels moyens de conversion de 16 octets au lieu de 32, qui devient 24 octets lorsque la base 64 codé.

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