Générer un hachage MD5 en Java

Mohd Mohtashim Nawaz 12 octobre 2023
  1. Algorithme de hachage MD5 en Java
  2. Utiliser le hachage MD5 en Java
  3. Utiliser le hachage MD5 sur des données volumineuses en Java
  4. Conclusion
Générer un hachage MD5 en Java

Dans cet article, nous allons comprendre l’algorithme MD5 pour générer le hachage des données et comment nous pouvons produire le hachage MD5 des données en Java.

Algorithme de hachage MD5 en Java

L’algorithme de hachage MD5 est un algorithme de hachage cryptographique, et il est largement utilisé comme somme de contrôle des fichiers de données. Nous pouvons utiliser cet algorithme pour générer un hachage cryptographique de 128 bits de nos données.

L’algorithme de hachage MD5 est largement utilisé car il est beaucoup plus rapide que les algorithmes de hachage sécurisés modernes.

Utiliser le hachage MD5 en Java

Java est largement utilisé pour le transfert de fichiers et la programmation côté serveur ; il n’est pas surprenant de trouver une bibliothèque pour générer du hachage MD5. Java nous fournit une classe MessageDigest, une classe enfant du MessageDigestSpi qui se trouve dans le package 'security' de Java.

Pour générer le hachage MD5 en Java,

  • Importez la classe MessageDisgest du package de sécurité Java.
  • Convertit nos données en un flux d’octets avant d’obtenir le résumé du message.
  • Invoquez ensuite la méthode getInstance() pour créer une instance de l’algorithme de hachage MD5.

    Exemple :

    public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
    
  • Nous allons invoquer la méthode digest() en passant les données que nous voulons obtenir le hachage MD5.

    Exemple:

    public byte[] digest(byte[] input)
    
  • Stocke le résumé du message sous la forme d’un flux d’octets dans un tableau d’octets.
  • Enfin, convertissez le résumé du message d’octets en chaîne.

Comprenons l’approche ci-dessus en utilisant un code de travail en Java.

Extrait de code:

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

Production:

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

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

Utiliser le hachage MD5 sur des données volumineuses en Java

Si vous avez des données volumineuses ou lisez les données en morceaux, utilisez la méthode update().

Exemple:

public void update(byte[] input)

Chaque fois que vous lisez un bloc de données, vous devez appeler la méthode update() en passant le bloc actuel. Une fois toutes les données lues, utilisez la forme polymorphe suivante de la méthode digest().

Exemple:

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

Pour la démonstration, vous pouvez voir l’exemple suivant.

Extrait de code:

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

Production:

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

Conclusion

L’une des mesures de sécurité fondamentales que nous devons assurer lors du partage des données est d’assurer l’intégrité des données. Par conséquent, nous avons besoin d’un algorithme de hachage qui produit une somme de contrôle des données partagées avec le récepteur pour garantir l’intégrité.

Nous avons compris la méthode pour générer la somme de contrôle MD5 en utilisant la classe MessageDigest et ses méthodes. Il est préférable d’être prudent lors de la lecture de données par blocs afin de ne pas se retrouver avec des résultats incorrects.