Kryptographie in Java. Mac-Klasse

Hallo Habr! Ich präsentiere Ihnen die Übersetzung des vierten Artikels "Java Mac" von Jakob Jenkov aus einer Reihe von Artikeln für Anfänger , die die Grundlagen der Kryptographie in Java erlernen möchten.


Inhaltsverzeichnis:


  1. Java-Kryptographie
  2. Java-Chiffre
  3. Messagedigest
  4. Mac
  5. Unterschrift
  6. Schlüsselpaar
  7. Schlüsselgenerator
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Zertifikat
  12. CertificateFactory
  13. CertPath

Nachrichtenauthentifizierungscode (MAC)


Der Java Mac ( javax.crypto.Mac ) generiert aus Binärdaten einen Nachrichtenauthentifizierungscode (MAC). MAC ist ein Message Digest, der mit einem geheimen Schlüssel verschlüsselt ist. Nur mit einem geheimen Schlüssel können Sie die Authentizität des MAC überprüfen.


Instanziierung


Bevor Sie die Mac-Klasse verwenden können, müssen Sie eine Mac-Instanz erstellen. Eine Instanz einer Mac-Klasse wird mit der Methode getInstance () erstellt . Hier ist ein Beispiel zum Erstellen einer Mac-Instanz:


Mac mac = Mac.getInstance("HmacSHA256"); 

Der an getInstance () übergebene Zeichenfolgenparameter enthält den Namen des verwendeten Algorithmus. In diesem Fall wird der HmacSHA256-Algorithmus verwendet.


Initialisierung


Nach dem Erstellen der Instanz sollte der Mac initialisiert werden. Eine Mac-Instanz wird durch Aufrufen der Methode init () initialisiert, wobei der geheime Schlüssel übergeben wird, der von der Instanz als Parameter verwendet wird. Hier ist ein Beispiel für die Initialisierung einer Mac-Instanz:


 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); 

Die init () -Methode akzeptiert eine Instanz von Key . In diesem Beispiel wird SecretKeySpec verwendet , das die Schlüsselschnittstelle implementiert.


MAC-Berechnung


Mit der MAC-Instanz (nach der Initialisierung) können Sie mit der Berechnung der MAC-Daten beginnen. Um den MAC-Wert zu berechnen, rufen Sie die Methode update () oder doFinal () auf . Wenn Sie nur einen Datenblock zur Berechnung des MAC haben, können Sie doFinal () direkt aufrufen, zum Beispiel:


 byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] macBytes = mac.doFinal(data); 

Wenn Sie mehrere Datenblöcke zur Berechnung des MAC haben, z. B. wenn Sie die Datei blockweise lesen, müssen Sie die update () -Methode für jeden Block aufrufen und im letzten Block mit doFinal () enden. Hier ist ein Beispiel:


 byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] data2 = "0123456789".getBytes("UTF-8"); mac.update(data); mac.update(data2); byte[] macBytes = mac.doFinal(); 

Source: https://habr.com/ru/post/de445228/


All Articles