🧰 UtlKit

Comment Utiliser le Générateur HMAC : Signatures SHA-256, SHA-384 et SHA-512 depuis des Clés en Texte ou en Hexadécimal, dans le Navigateur

Un message et un secret, lus comme texte UTF-8 ou hexadécimal brut, signés en SHA-256, SHA-384 ou SHA-512 vers un digest hexadécimal ou Base64, le tout calculé dans le navigateur par WebCrypto.

Le Générateur HMAC signe un message avec une clé secrète et imprime le digest à clé. Tout le calcul est un appel WebCrypto dans le navigateur : le message et la clé restent sur la page, rien n'est envoyé à aucun serveur, et le résultat est une chaîne déterministe que vous pouvez coller dans un en-tête de requête, un paramètre de requête ou un vecteur de test. Commencez au Générateur HMAC, saisissez The quick brown fox jumps over the lazy dog comme message, saisissez key comme secret, gardez SHA-256 et Hex sélectionnés et appuyez sur Générer : le digest imprime f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8.

Les quatre contrôles

Quatre entrées dirigent le digest : la boîte de message, la boîte de clé secrète avec son bascule Text/Hex, la sélection d'algorithme et la sélection de format de sortie. Le message est une zone de texte sur plusieurs lignes : les retours à la ligne font partie du message et sont signés, si bien que les mêmes mots sur deux lignes signent autrement que les mêmes mots joints par une espace, et les octets UTF-8 de 你好 signent 309b75c0cbbfb27bb35b8d7b8f4adb4b9399cd54339ab5faeb8798e1b9f7f00c sous la clé key. La clé secrète est une boîte sur une ligne, et sa bascule décide comment la chaîne est lue. La sélection d'algorithme offre SHA-256, SHA-384 et SHA-512, et celle de format offre Hex et Base64. Générer est un bouton explicite : rien n'est calculé avant qu'il soit appuyé, et le digest apparaît dans une boîte en lecture seule avec un bouton copier à côté.

Clés en texte et clés en hexadécimal

En mode Text, la clé est lue comme les octets UTF-8 exactement tels que tapés : chaque caractère fait partie de la clé, y compris un espace final, si bien que la clé key signe abc en 9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab, tandis que key avec un espace final signe le même abc en 0324ef70f9e605e123731b458dcdce99cf5f8d23572f604fbdabf371aedb0f68. En mode Hex, la chaîne est d'abord dépouillée de tout espace, puis lue comme des paires d'octets bruts, si bien que 616263 sont les trois octets 0x61, 0x62 et 0x63, et non les six caractères du texte 616263 : sous le message msg, la clé hex 616263 signe eb14f17c9f056479f147adcf8020d27914f1e5971f049e75bf21a669cbd747e2, tandis que la clé en texte 616263 signe 49962d2f0cde29c6a4848f8ea64575424ad42d3d108452127c0512cb88444a41. La chaîne hex doit compter au moins deux caractères, une longueur paire, et tous les caractères des chiffres hexadécimaux ; 6162635 échoue au contrôle avant que la moindre cryptographie ne tourne, de même que les longueurs impaires et les lettres hors de a à f.

Les trois algorithmes

La longueur du digest est fixée par l'algorithme : SHA-256 imprime 32 octets, soit 64 caractères hex ou 44 caractères Base64 avec un = de bourrage ; SHA-384 imprime 48 octets, 96 caractères hex ou 64 caractères Base64 sans bourrage ; SHA-512 imprime 64 octets, 128 caractères hex ou 88 caractères Base64 avec un bourrage double. Les trois sont la même construction à clé sur trois fonctions de hachage, si bien que basculer la sélection change la longueur et la valeur, pas la forme de l'entrée. L'outil reproduit les vecteurs de test de la RFC 4231 : avec la clé hex 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b et le message Hi There, SHA-256 imprime b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7 et SHA-512 imprime 87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854, et avec la clé en texte Jefe et le message what do ya want for breakfast?, SHA-256 imprime 47f69d8f80f0a6326746beec23a9040fd533642b5ba38a99287670639d8b862a.

Hex et Base64

Hex imprime le digest octet par octet en minuscules, deux caractères par octet, et Base64 imprime les mêmes octets avec bourrage standard. Les deux notations portent les mêmes 32 octets : le message fox sous la clé key est f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8 en Hex et 97yD9DBThCSxMpjmqm+xQ+9NWaFJRhdZl0edvC0aPNg= en Base64, le = final étant du bourrage et non un caractère signé. Le message Jefe imprime R/adj4DwpjJnRr7sI6kED9UzZCtbo4qZKHZwY52Lhio= sous SHA-256, MxTAcsyrQOuSUFsKlh1Gv2UuDowpCJfZzsFDvCo65FGJ15G5QCeCSey3RFF3dIlG sous SHA-384, où les 48 octets remplissent les groupes Base64 exactement et aucun bourrage n'apparaît, et af7nmi5sP0zyOeCqttVBl2h4BIXw5B/8dZckor99FGR+CncEsWts5Zi2pWU1HIhhnQ3+0nKMj8+Ja0GvkB1UCA== sous SHA-512, où les 64 octets laissent un octet dans le dernier groupe et le double = le bourre. Le bouton copier met la chaîne imprimée dans le presse-papiers et se lit Copié pendant deux secondes.

Déterminisme et contrôles d'entrée

Le même message, la même clé et le même algorithme impriment toujours le même digest : il n'y a ni sel, ni horodatage ni aléatoire, et c'est cette propriété qui rend le HMAC utilisable comme vecteur de test et comme vérification partagée entre deux systèmes. Deux entrées sont refusées avant que la moindre cryptographie ne tourne : un message vide ou plein d'espaces lève l'erreur de message, et une clé vide ou pleine d'espaces lève l'erreur de clé ; une clé hex qui échoue au contrôle hex lève l'erreur hex invalide, et dans les trois cas les boîtes gardent leur contenu pour correction. La longueur de la clé n'a pas d'autre restriction : une clé d'un seul octet signe abc en df55998f9fc33d78ac99d1d8ebc2b6e16aa076c4189946942a82b55d5dee8dc7, et une clé de 100 octets signe le même abc en 30f0f7f4a3d31b9750666b038c048550020795dd2743759bf83bcf5e0f125b36, parce que la construction HMAC hache d'abord une clé trop longue jusqu'à la taille du hachage. Un coin de plateforme subsiste : l'API subtle de WebCrypto n'existe que dans les contextes sécurisés, si bien que sur une page servie en http simple, le bouton lève l'erreur d'échec au lieu de calculer.

Ce que ce n'est pas

Le Générateur HMAC n'est pas un outil de hachage simple : pour un digest du message seul, sans aucune clé, le Générateur de Hachage tourne MD5, SHA-1 et la famille SHA-2 sur le texte. Ce n'est pas non plus un outil JWT : pour lire, diviser et décoder en Base64 un jeton plutôt que de le signer, le Décodeur JWT fait cela. Et il ne chiffre pas : le digest est une signature, pas un contenant de secrets, et le guide AES couvre la direction du chiffrement. Et il ne garde aucun état au-delà des quatre entrées : il n'y a ni historique, ni clé gardée ni mémoire d'un digest précédent, et fermer la page jette le message et le secret.

Outils Associés

Questions Fréquentes

Le Générateur HMAC envoie-t-il le message ou la clé à un serveur ?

Non. Le digest est calculé dans la page par l'API WebCrypto du navigateur à partir des deux boîtes et des deux sélections. Les octets du message, les octets de la clé et le résultat restent tous dans la page ; appuyer sur Générer ne fait aucune requête réseau, et la seule chose qui quitte la page est une copie que vous faites du digest imprimé.

Pourquoi les mêmes mots donnent-ils des digests différents ?

Parce que le mode de clé lit la chaîne différemment. La clé en texte 616263 est six caractères UTF-8 et signe le message msg en 49962d2f0cde29c6a4848f8ea64575424ad42d3d108452127c0512cb88444a41, tandis que la clé hex 616263 est trois octets bruts et signe le même message en eb14f17c9f056479f147adcf8020d27914f1e5971f049e75bf21a669cbd747e2. Les espaces comptent de la même façon en mode texte : une clé avec un espace final signe abc en 0324ef70f9e605e123731b458dcdce99cf5f8d23572f604fbdabf371aedb0f68, différent de la même clé sans l'espace.

Pourquoi la clé hex 6162635 est-elle refusée ?

Le contrôle hex tourne avant la moindre cryptographie : la chaîne, sans espaces, doit compter au moins deux caractères, une longueur paire, et chaque caractère un chiffre hexadécimal. 6162635 a sept caractères, une longueur impaire, si bien qu'elle lève l'erreur hex invalide ; une chaîne avec une lettre hors de a à f, ou un seul caractère, échoue au même contrôle. L'erreur ne vide pas la boîte.

Appuyer deux fois sur Générer imprime-t-il deux digests différents ?

Non. Le HMAC est déterministe : le même message, la même clé, le même algorithme et le même format impriment toujours la même chaîne, parce que la construction n'a ni sel, ni horodatage ni aléatoire. C'est la propriété qui laisse deux systèmes avec un secret partagé se vérifier l'un l'autre, et la raison pour laquelle la valeur imprimée peut être collée comme vecteur de test.

Lequel choisir entre SHA-256, SHA-384 et SHA-512 ?

L'algorithme est un contrat avec le vérificateur : choisissez celui que le correspondant ou la spécification attend, parce qu'une signature vérifiée contre le mauvais hachage ne correspondra pas. Les trois diffèrent par la longueur de sortie, 32, 48 et 64 octets, et par la fonction de hachage dans la construction à clé. En choisissant librement, SHA-256 est le défaut le plus courant, et SHA-512 donne le digest le plus long.

Articles Associés