Bonjour, Habr! Je vous présente la traduction du quatrième article "Java Mac" de Jakob Jenkov 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 Java
- Chiffrement Java
- Messagedigest
- Mac
- Signature
- Keypair
- Générateur de clés
- KeyPairGenerator
- Keystore
- Keytool
- Attestation
- CertificateFactory
- CertPath
Code d'authentification de message (MAC) ou code d'authentification de message
Le Java Mac ( javax.crypto.Mac ) génère un code d'authentification de message (MAC) à partir de données binaires. MAC est un résumé de message crypté avec une clé secrète. Ce n'est qu'avec une clé secrète que vous pouvez vérifier l'authenticité du MAC.
Instanciation
Avant d'utiliser la classe Mac, vous devez créer une instance de Mac. Une instance d'une classe Mac est créée à l'aide de la méthode getInstance () . Voici un exemple de création d'une instance Mac:
Mac mac = Mac.getInstance("HmacSHA256");
Le paramètre de chaîne passé à getInstance () contient le nom de l'algorithme utilisé. Dans ce cas, l'algorithme HmacSHA256 est utilisé.
Initialisation
Après avoir créé l'instance, le Mac doit être initialisé. Une instance Mac est initialisée en appelant la méthode init () , en transmettant la clé secrète qui sera utilisée par l'instance comme paramètre. Voici un exemple d'initialisation d'une instance Mac:
byte[] keyBytes = new byte[]{0,1,2,3,4,5,6,7,8 ,9,10,11,12,13,14,15}; String algorithm = "RawBytes"; SecretKeySpec key = new SecretKeySpec(keyBytes, algorithm); mac.init(key);
La méthode init () accepte une instance de Key . Cet exemple utilise SecretKeySpec , qui implémente l'interface Key.
Calcul MAC
À l'aide de l'instance MAC (après l'initialisation), vous pouvez commencer à calculer les données MAC. Pour calculer la valeur MAC, vous appelez la méthode update () ou doFinal () . Si vous n'avez qu'un seul bloc de données pour calculer le MAC, vous pouvez appeler directement doFinal () , par exemple:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] macBytes = mac.doFinal(data);
Si vous disposez de plusieurs blocs de données pour calculer MAC, par exemple, si vous lisez le fichier bloc par bloc, vous devez appeler la méthode update () pour chaque bloc et terminer par doFinal () sur le dernier bloc. Voici un exemple:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] data2 = "0123456789".getBytes("UTF-8"); mac.update(data); mac.update(data2); byte[] macBytes = mac.doFinal();