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
Répondre
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.
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.
Un hachage md5 est de 128 bits, ce qui permettrait d'encoder 24 caractères de base64. –
Merci Arantor! Réponse parfaite! –
@ GregS, désolé, oui, je pensais à SHA1 qui est de 160 bits. – Arantor
- 1. Fonction MD5 Hash dans Excel?
- 2. favicon de codage en base64
- 3. Mauvais codage Base64 utilisant libssl
- 4. Codage base64 en Java et décodage en C#
- 5. Valeur de codage en tant que base64
- 6. Codage d'un fichier image avec base64
- 7. C# en Ruby codage sha1 base64
- 8. Convertir base64'd hash SHA1 à Hex hachages
- 9. MD5 Hash de la chaîne ISO-8859-1 en Java
- 10. comparaison PERL md5() et PHP md5()
- 11. MD5 MySQL et Java MD5 pas égal
- 12. Algorithme de codage Java base64 pour correspondre à l'implémentation d'openssl
- 13. Le codage décodeur django base64 renvoie une valeur différente
- 14. Javascript Base64 codage UTF8 chaîne échoue dans webkit/safari
- 15. C# hash
- 16. md5 et le sel
- 17. VB, DES et MD5
- 18. Algorithme SHA1 base64 en javascript et C#
- 19. Problèmes de codage de caractères lors de la génération de table de hachage MD5
- 20. Python MD5 ne correspond pas à md5 dans le terminal
- 21. md5 de l'objet pil
- 22. question de génération de sel et hash
- 23. Rails: base64 et problème d'échappement de caractères
- 24. Spring Security Encrypt MD5
- 25. Générer automatiquement MD5 et afficher
- 26. Performances SQL et chaînes MD5
- 27. Passer de md5 à sha256
- 28. Besoin de directive MD5
- 29. Différents MD5 avec as3corelib
- 30. SQL Comment puis-je convertir MD5 Hash String en binaire en utilisant une requête?
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. –
Un hachage MD5 n'est pas hexadécimal! C'est 16 octets - hexadécimal est simplement une représentation conventionnelle. –
@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). –