HMAC-SHA256 pour l’intégrité des messages
Créez et vérifiez des signatures HMAC-SHA256 afin de garantir l’intégrité des charges utiles de l’API.
HMAC-SHA256 pour l’intégrité des messages est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Qu’est-ce qu’un HMAC ?
Un HMAC (code d’authentification de message fondé sur un hachage) combine une fonction de hachage cryptographique et une clé secrète pour produire un MAC. Il prouve à la fois que les données n’ont pas été falsifiées ET que l’expéditeur connaît la clé secrète.
HMAC ou hachage simple
Un hachage SHA-256 simple peut être calculé par n’importe qui. Un HMAC nécessite la clé secrète : seules les parties qui connaissent la clé peuvent créer ou vérifier un HMAC valide. Les hachages simples garantissent l’intégrité, mais pas l’authentification.
Calculer un HMAC-SHA256 en Java
Utilisez Mac.getInstance("HmacSHA256"), initialisez-le avec une SecretKeySpec, puis appelez doFinal(data).
byte[] keyBytes = "my-secret-key".getBytes(StandardCharsets.UTF_8);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] hmac = mac.doFinal("payload data".getBytes(StandardCharsets.UTF_8));
String hmacHex = HexFormat.of().formatHex(hmac);
System.out.println(hmacHex); // 64-char hexVérifier un HMAC
Recalculez le HMAC sur les données reçues avec la clé partagée. Utilisez une comparaison à temps constant (MessageDigest.isEqual) pour empêcher les attaques par analyse temporelle.
byte[] expectedHmac = computeHmac(key, receivedPayload);
byte[] actualHmac = HexFormat.of().parseHex(receivedHmacHex);
boolean valid = MessageDigest.isEqual(expectedHmac, actualHmac);
if (!valid) throw new SecurityException("HMAC verification failed — data tampered!");Générer une clé sécurisée
Les clés HMAC doivent être constituées d’octets aléatoires, et non de mots de passe. Utilisez KeyGenerator ou SecureRandom pour générer une clé de 256 bits.
KeyGenerator kg = KeyGenerator.getInstance("HmacSHA256");
kg.init(256);
SecretKey key = kg.generateKey();
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());HMAC pour signer les requêtes d’API
Calculez le HMAC sur la méthode HTTP, le chemin, l’horodatage et le corps. Incluez le HMAC dans l’en-tête X-Signature. Le serveur le recalcule et le compare afin de vérifier que la requête n’a pas été falsifiée.
String payload = method + "\n" + path + "\n" + timestamp + "\n" + body;
byte[] hmac = computeHmac(apiSecretKey, payload);
request.header("X-Signature", "hmac-sha256=" + HexFormat.of().formatHex(hmac));
request.header("X-Timestamp", timestamp);Empêcher les attaques par rejeu
Un attaquant peut rejouer une requête signée valide. Incluez un horodatage dans les données signées et rejetez les requêtes datant de plus de quelques minutes.
long timestamp = Long.parseLong(request.getHeader("X-Timestamp"));
if (Math.abs(System.currentTimeMillis() / 1000 - timestamp) > 300) {
throw new SecurityException("Request too old — possible replay attack");
}HMAC pour vérifier les webhooks
GitHub, Stripe et de nombreux services signent leurs webhooks avec un HMAC. Vérifiez l’en-tête X-Hub-Signature-256 pour vous assurer que le webhook provient bien du service et n’a pas été modifié.
// GitHub webhook verification:
String received = request.getHeader("X-Hub-Signature-256").replace("sha256=","");
byte[] expected = computeHmac(webhookSecret, request.getBody());
boolean valid = MessageDigest.isEqual(expected, HexFormat.of().parseHex(received));HMAC dans JWT
HS256 (HMAC-SHA256) est un algorithme de signature JWT courant. L’en-tête et la charge utile sont signés avec un secret partagé. L’émetteur et le vérificateur doivent tous deux connaître le secret : cette méthode convient aux microservices situés dans le même périmètre de confiance.
Rotation des clés HMAC
Faites régulièrement tourner les clés HMAC. Pendant la rotation, acceptez les HMAC produits avec l’ancienne et la nouvelle clé durant une courte période de chevauchement, puis retirez l’ancienne clé.
Quand utiliser HMAC ou des signatures numériques
HMAC : symétrique — les deux parties partagent le secret, il est rapide et convient aux API internes ainsi qu’à la vérification des webhooks. Signatures numériques (RSA/ECDSA) : asymétriques — seul le signataire possède la clé privée, et toute personne disposant de la clé publique peut vérifier la signature ; elles conviennent aux JWT dans les systèmes distribués.
Vérification rapide
Pourquoi la comparaison des HMAC doit-elle utiliser une égalité à temps constant ?
Récapitulatif
HMAC-SHA256 garantit l’intégrité authentifiée : il prouve l’origine des données et l’absence de falsification. Utilisez Mac.getInstance("HmacSHA256"). Utilisez toujours une comparaison à temps constant. Incluez des horodatages pour empêcher les attaques par rejeu. Utilisez-le pour signer les API, vérifier les webhooks et les JWT HS256.
Questions Fréquemment Posées
La leçon « HMAC-SHA256 pour l’intégrité des messages » est-elle gratuite ?
Oui — le texte complet de « HMAC-SHA256 pour l’intégrité des messages » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « HMAC-SHA256 pour l’intégrité des messages » ?
Créez et vérifiez des signatures HMAC-SHA256 afin de garantir l’intégrité des charges utiles de l’API. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « HMAC-SHA256 pour l’intégrité des messages » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Hachage cryptographique avec MessageDigest
- Chiffrement symétrique AES
- HMAC-SHA256 pour l’intégrité des messages
- JWT : structure, création et vérification