Crittografia Java - Message Digest

Le funzioni hash sono estremamente utili e compaiono in quasi tutte le applicazioni di sicurezza delle informazioni.

Una funzione hash è una funzione matematica che converte un valore di input numerico in un altro valore numerico compresso. L'input per la funzione hash è di lunghezza arbitraria ma l'output è sempre di lunghezza fissa.

Vengono chiamati i valori restituiti da una funzione hash message digest o semplicemente hash values. La seguente immagine ha illustrato la funzione hash.

Java fornisce una classe denominata MessageDigestche appartiene al pacchetto java.security. Questa classe supporta algoritmi come SHA-1, SHA 256, MD5 per convertire un messaggio di lunghezza arbitraria in un digest del messaggio.

Per convertire un determinato messaggio in un digest del messaggio, segui i passaggi indicati di seguito:

Passaggio 1: crea un oggetto MessageDigest

La classe MessageDigest fornisce un metodo denominato getInstance(). Questo metodo accetta una variabile String che specifica il nome dell'algoritmo da utilizzare e restituisce un oggetto MessageDigest che implementa l'algoritmo specificato.

Crea l'oggetto MessageDigest usando il getInstance() metodo come mostrato di seguito.

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

Passaggio 2: passare i dati all'oggetto MessageDigest creato

Dopo aver creato l'oggetto digest del messaggio, è necessario passarvi il messaggio / i dati. Puoi farlo usando ilupdate() metodo del MessageDigest class, questo metodo accetta un array di byte che rappresenta il messaggio e lo aggiunge / lo passa all'oggetto MessageDigest creato sopra.

md.update(msg.getBytes());

Passaggio 3: genera il digest del messaggio

Puoi generare il digest del messaggio utilizzando il file digest() metodo della classe MessageDigest questo metodo calcola la funzione hash sull'oggetto corrente e restituisce il digest del messaggio sotto forma di array di byte.

Genera il digest del messaggio utilizzando il metodo digest.

byte[] digest = md.digest();

Esempio

Di seguito è riportato un esempio che legge i dati da un file e genera un messaggio digest e lo stampa.

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

Produzione

Il programma di cui sopra genera il seguente output:

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