Generieren MD5-Hash in Java

Mohd Mohtashim Nawaz 12 Oktober 2023
  1. MD5-Hash-Algorithmus in Java
  2. Verwendung von MD5-Hash in Java
  3. Verwendung von MD5-Hash für große Datenmengen in Java
  4. Fazit
Generieren MD5-Hash in Java

In diesem Artikel werden wir den MD5-Algorithmus zum Generieren des Daten-Hashs verstehen und wie wir den MD5-Daten-Hash in Java erzeugen können.

MD5-Hash-Algorithmus in Java

Der MD5-Hash-Algorithmus ist ein kryptografischer Hash-Algorithmus und wird hauptsächlich als Prüfsumme der Datendateien verwendet. Wir können diesen Algorithmus verwenden, um einen kryptografischen 128-Bit-Hash unserer Daten zu generieren.

Der MD5-Hash-Algorithmus ist weit verbreitet, da er viel schneller ist als die modernen sicheren Hashing-Algorithmen.

Verwendung von MD5-Hash in Java

Java wird häufig für die Dateiübertragung und die serverseitige Programmierung verwendet. Es ist nicht verwunderlich, eine Bibliothek zum Generieren von MD5-Hash zu finden. Java stellt uns eine MessageDigest-Klasse zur Verfügung, eine untergeordnete Klasse von MessageDigestSpi, die im 'security'-Paket von Java enthalten ist.

Um den MD5-Hash in Java zu generieren,

  • Importieren Sie die Klasse MessageDisgest aus dem Java-Sicherheitspaket.
  • Konvertieren Sie unsere Daten in einen Strom von Bytes, bevor Sie den Message Digest erhalten.
  • Rufen Sie dann die Methode getInstance() auf, um eine Instanz des MD5-Hash-Algorithmus zu erstellen.

    Beispiel :

    public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
    
  • Wir rufen die digest()-Methode auf, indem wir die Daten übergeben, die wir wollen, um den MD5-Hash zu erhalten.

    Beispiel:

    public byte[] digest(byte[] input)
    
  • Speichert den Message Digest als Byte-Stream in einem Byte-Array.
  • Konvertieren Sie zuletzt den Message Digest von Bytes in Strings.

Lassen Sie uns den obigen Ansatz mit einem funktionierenden Code in Java verstehen.

Code-Auszug:

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class md5Test {
  public static void main(String[] args) {
    String str;
    Scanner scan = new Scanner(System.in);
    str = scan.nextLine();
    System.out.println("Your input: " + str);

    byte[] msg = str.getBytes();

    byte[] hash = null;
    try {
      MessageDigest md = MessageDigest.getInstance("MD5");
      hash = md.digest(msg);
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }
    StringBuilder strBuilder = new StringBuilder();
    for (byte b : hash) {
      strBuilder.append(String.format("%02x", b));
    }
    String strHash = strBuilder.toString();
    System.out.println("The MD5 hash: " + strHash);
  }
}

Ausgabe:

Hello, Peter
Your input: Hello, Peter
The MD5 hash: 945062a2fee23e0901b37fcb5cd952c9

Java is so awesome.
Your input: Java is so awesome.
The MD5 hash: 601835019da217140c2755c919ee18c2

Verwendung von MD5-Hash für große Datenmengen in Java

Wenn Sie große Datenmengen haben oder die Daten in Blöcken lesen, verwenden Sie die Methode update().

Beispiel:

public void update(byte[] input)

Jedes Mal, wenn Sie einen Datenblock lesen, sollten Sie die Methode update() aufrufen, indem Sie den aktuellen Chunk übergeben. Nachdem alle Daten gelesen wurden, verwenden Sie die folgende polymorphe Form der digest()-Methode.

Beispiel:

public byte[] digest() // It means you will pass no parameter to the `digest()` method.

Zur Veranschaulichung sehen Sie das folgende Beispiel.

Code-Auszug:

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class md5Test {
  public static void main(String[] args) {
    String str;
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter message:");
    str = scan.nextLine();
    System.out.println("Your input: " + str);

    byte[] hash = null;

    MessageDigest md = null;

    try {
      md = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }

    md.update(str.getBytes());

    System.out.println("Enter message:");
    str = scan.nextLine();

    md.update(str.getBytes());
    hash = md.digest();

    StringBuilder strBuilder = new StringBuilder();
    for (byte b : hash) {
      strBuilder.append(String.format("%02x", b));
    }
    String strHash = strBuilder.toString();
    System.out.println("The MD5 hash: " + strHash);
  }
}

Ausgabe:

Enter message:
Hello Java
Your input: Hello Java
Enter message:
I'm Peter
The MD5 hash: 9008f99fa602a036ce0c7a6784b240b1

Fazit

Eine der grundlegenden Sicherheitsmaßnahmen, die wir beim Teilen der Daten sicherstellen sollten, ist die Gewährleistung der Datenintegrität. Daher benötigen wir einen Hash-Algorithmus, der eine Prüfsumme der mit dem Empfänger geteilten Daten erzeugt, um die Integrität sicherzustellen.

Wir haben die Methode zur Generierung der MD5-Prüfsumme mit der Klasse MessageDigest und ihren Methoden verstanden. Es ist am besten, beim Lesen von Daten in Blöcken vorsichtig zu sein, damit Sie nicht mit falschen Ergebnissen enden.