Kryptographie in Java. Klasse MessageDigest

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


Inhaltsverzeichnis:


  1. Kryptographie
  2. 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

Java MessageDigest


Die Java-Klasse MessageDigest stellt eine kryptografische Hash-Funktion dar, die einen Nachrichtenauszug aus Binärdaten berechnen kann. Wenn Sie einen Satz verschlüsselter Daten erhalten, können Sie nicht sicher sein, dass diese während des Transports nicht geändert wurden. Ein Message Digest hilft bei der Lösung dieses Problems.


Um festzustellen, ob die verschlüsselten Daten während des Transports geändert wurden, muss der Absender den Nachrichtenauszug aus den Daten berechnen und zusammen mit den Daten senden. Die andere Seite, die verschlüsselte Daten und einen Nachrichtenauszug empfängt, kann den Nachrichtenauszug aus den Daten neu berechnen und prüfen, ob der berechnete Nachrichtenauszug mit dem mit den Daten empfangenen Nachrichtenauszug übereinstimmt. Wenn die beiden Nachrichtenübersichten übereinstimmen, besteht die Möglichkeit, dass die verschlüsselten Daten während des Transports nicht geändert wurden.


Es gibt mehrere Bedingungen, die erfüllt sein müssen, damit ein Nachrichtenauszug als Änderungserkennungsmechanismus nützlich ist. Die genauen Bedingungen sind jedoch Teil einer kryptografischen Theorie, die in diesem Artikel nicht behandelt wird, sondern nur die Verwendung von Java zum Empfangen eines Message Digest in der MessageDigest-Klasse erläutert.


Erstellen einer Instanz von MessageDigest


Um die MessageDigest-Klasse zu instanziieren, wird die statische getInstance () -Methode der MessageDigest-Klasse aufgerufen. Hier ist ein Beispiel zum Erstellen einer Instanz von MessageDigest:


MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); 

Der an die Methode getInstance () übergebene Zeichenfolgenparameter bestimmt den für eine bestimmte Nachricht verwendeten Digest-Algorithmus.


Message Digest-Algorithmen


Die Java Cryptography API unterstützt die folgenden Message Digest-Algorithmen (externe Kryptografieanbieter können mehr unterstützen):


  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

Nicht alle dieser Algorithmen sind gleich sicher. Zum Zeitpunkt des Schreibens wird empfohlen, SHA-256 oder höher zu verwenden, um die höchstmögliche Sicherheitsstufe zu erreichen.


Message Digest-Berechnung


Durch Erstellen einer Instanz von MessageDigest können Sie damit den Message Digest berechnen. Wenn Sie einen Datenblock zum Berechnen des Nachrichtenauszugs haben, verwenden Sie die Methode digest () . So sieht eine Message Digest-Berechnung aus einem einzelnen Datenblock aus:


 byte[] data1 = "0123456789".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] digest = messageDigest.digest(data1); 

Wenn mehrere Datenblöcke in demselben Message Digest enthalten sein müssen, rufen Sie die update () -Methode auf und beenden Sie mit einem Aufruf von Digest () . So sieht eine Message Digest-Berechnung aus mehreren Datenblöcken aus:


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

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


All Articles