Cryptographie Java - Résumé des messages

Les fonctions de hachage sont extrêmement utiles et apparaissent dans presque toutes les applications de sécurité de l'information.

Une fonction de hachage est une fonction mathématique qui convertit une valeur d'entrée numérique en une autre valeur numérique compressée. L'entrée de la fonction de hachage est de longueur arbitraire mais la sortie est toujours de longueur fixe.

Les valeurs renvoyées par une fonction de hachage sont appelées message digest ou simplement hash values. L'image suivante illustre la fonction de hachage.

Java fournit une classe nommée MessageDigestqui appartient au package java.security. Cette classe prend en charge des algorithmes tels que les algorithmes SHA-1, SHA 256, MD5 pour convertir un message de longueur arbitraire en résumé de message.

Pour convertir un message donné en résumé de message, suivez les étapes ci-dessous -

Étape 1: créer un objet MessageDigest

La classe MessageDigest fournit une méthode nommée getInstance(). Cette méthode accepte une variable String spécifiant le nom de l'algorithme à utiliser et retourne un objet MessageDigest implémentant l'algorithme spécifié.

Créez un objet MessageDigest à l'aide de getInstance() méthode comme indiqué ci-dessous.

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

Étape 2: transmettre les données à l'objet MessageDigest créé

Après avoir créé l'objet de résumé de message, vous devez lui transmettre le message / les données. Vous pouvez le faire en utilisant leupdate() méthode de la MessageDigest class, cette méthode accepte un tableau d'octets représentant le message et l'ajoute / le transmet à l'objet MessageDigest créé ci-dessus.

md.update(msg.getBytes());

Étape 3: générer le résumé du message

Vous pouvez générer le résumé de message à l'aide du digest() méthode de la classe MessageDigest cette méthode calcule la fonction de hachage sur l'objet courant et renvoie le résumé du message sous la forme d'un tableau d'octets.

Générez le résumé du message à l'aide de la méthode digest.

byte[] digest = md.digest();

Exemple

Voici un exemple qui lit les données d'un fichier, génère un résumé de message et l'imprime.

import java.security.MessageDigest;
import java.util.Scanner;

public class MessageDigestExample {
   public static void main(String args[]) throws Exception{
      //Reading data from user
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the message");
      String message = sc.nextLine();
	  
      //Creating the MessageDigest object  
      MessageDigest md = MessageDigest.getInstance("SHA-256");

      //Passing data to the created MessageDigest Object
      md.update(message.getBytes());
      
      //Compute the message digest
      byte[] digest = md.digest();      
      System.out.println(digest);  
     
      //Converting the byte array in to HexString format
      StringBuffer hexString = new StringBuffer();
      
      for (int i = 0;i<digest.length;i++) {
         hexString.append(Integer.toHexString(0xFF & digest[i]));
      }
      System.out.println("Hex format : " + hexString.toString());     
   }
}

Production

Le programme ci-dessus génère la sortie suivante -

Enter the message
Hello how are you
[B@55f96302
Hex format: 2953d33828c395aebe8225236ba4e23fa75e6f13bd881b9056a3295cbd64d3