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