Bonjour, Habr! Je vous présente la traduction du troisième article "Java MessageDigest" par Jakob Jenkov à partir d'une série d'articles pour les débutants qui veulent apprendre les bases de la cryptographie en Java.
Table des matières:
- Cryptographie
- Chiffre
- Messagedigest
- Mac
- Signature
- Keypair
- Générateur de clés
- KeyPairGenerator
- Keystore
- Keytool
- Attestation
- CertificateFactory
- CertPath
Java MessageDigest
La classe Java MessageDigest représente une fonction de hachage cryptographique qui peut calculer un résumé de message à partir de données binaires. Lorsque vous recevez un ensemble de données chiffrées, vous ne pouvez pas être sûr qu'il n'a pas été modifié pendant le transport. Un résumé de message permet de résoudre ce problème.
Pour déterminer si les données chiffrées ont été modifiées pendant le transport, l'expéditeur doit calculer le résumé du message à partir des données et l'envoyer avec les données. L'autre côté, recevant des données chiffrées et un résumé de message, peut recalculer le résumé de message à partir des données et vérifier si le résumé de message calculé correspond au résumé de message reçu avec les données. Si les deux résumés de messages correspondent, il est possible que les données chiffrées n'aient pas été modifiées pendant le transport.
Plusieurs conditions doivent être remplies pour qu'un résumé de message soit utile comme mécanisme de détection des modifications. Cependant, les conditions exactes font partie d'une théorie cryptographique qui n'est pas abordée dans cet article, mais explique uniquement comment utiliser Java pour recevoir un résumé de message dans la classe MessageDigest.
Création d'une instance de MessageDigest
Pour créer une instance de la classe MessageDigest, la méthode statique getInstance () de la classe MessageDigest est appelée. Voici un exemple de création d'une instance de MessageDigest:
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
Le paramètre de chaîne transmis à la méthode getInstance () détermine l'algorithme de résumé utilisé pour un message particulier.
Algorithmes de résumé de message
L'API Java Cryptography prend en charge les algorithmes de résumé de message suivants (les fournisseurs de cryptographie externes peuvent en prendre en charge plus):
- MD2
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA-512
Tous ces algorithmes ne sont pas également sûrs. Au moment de la rédaction, il est recommandé d'utiliser SHA-256 ou supérieur pour obtenir le plus haut niveau de sécurité possible.
Calcul du résumé des messages
En créant une instance de MessageDigest, vous pouvez l'utiliser pour calculer le résumé du message. Si vous disposez d'un bloc de données pour calculer le résumé du message, utilisez la méthode digest () . Voici à quoi ressemble un calcul de résumé de message à partir d'un seul bloc de données:
byte[] data1 = "0123456789".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] digest = messageDigest.digest(data1);
S'il y a plusieurs blocs de données à inclure dans le même résumé de message, appelez la méthode update () et terminez avec digest () . Voici à quoi ressemble un calcul de résumé de message à partir de plusieurs blocs de données:
byte[] data1 = "0123456789".getBytes("UTF-8"); byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.update(data1); messageDigest.update(data2); byte[] digest = messageDigest.digest();