/**
  * Calcolo del digest (impronta digitale) di un messaggio
  @author Enrico Denti
  @version 1.0, 26/2/1999
*/

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

class Esempio0 {

  public static void main(String args[]){
	System.out.println("Calcolo del digest di un messaggio");

	MessageDigest sha = null;
	try {
	  sha = MessageDigest.getInstance("SHA-1");
	  // SHA = Secure Hash Algorithm, standard del NIST
	}
	catch (NoSuchAlgorithmException e) {
	  System.out.println("Algoritmo richiesto non supportato");
	}

	byte[] messaggioInChiaro = {10,20,30,40,50};
	// nella realt sar letto da un file

	sha.update(messaggioInChiaro);
	byte[] impronta = sha.digest();
	// se il messaggio  molto grande, ad esempio perch
	// viene letto da un file,  possibile fare pi chiamate
	// ad update(), prima di chiamare digest(): i messaggi
	// inseriti con update() saranno appesi uno all'altro, e
	// l'impronta sar comunque riferita al messaggio completo.
	// Ad esempio:
	// sha.update(msg1);
	// ...
	// sha.update(msgN);
	// impronta = sha.digest();
	// si ottiene il digest di msg1+msg2+...+msgN

	System.out.println("Digest del messaggio:");
	for (int i=0; i<impronta.length; i++)
		System.out.print("" + impronta[i] + "\t");
	System.out.println("");

	// Per verificare che il messaggio non sia stato alterato,
	// basta ricalcolare l'impronta e verificare che venga uguale.
  }
}
