Palavras-chave: Java, hash, MD5, SHA-1, SHA-256, MessageDigest

A maneira mais comum de se gerar um código hash em Java é utilizando a classe java.security.MessageDigest. O método a seguir gera o hash MD5 de uma string:

MessageDigest md = MessageDigest.getInstance("MD5");
md.update(frase.getBytes());
byte[] hashMd5 = md.digest();

O hash é retornado como um array de bytes, que pode ser impresso utilizando o método citado em um post anterior:

private static String stringHexa(byte[] bytes) {
   StringBuilder s = new StringBuilder();
   for (int i = 0; i < bytes.length; i++) {
       int parteAlta = ((bytes[i] >> 4) & 0xf) << 4;
       int parteBaixa = bytes[i] & 0xf;
       if (parteAlta == 0) s.append('0');
       s.append(Integer.toHexString(parteAlta | parteBaixa));
   }
   return s.toString();
}

Além do MD5, podemos também usar outros algoritmos de hash normalmente presentes nas distribuições da JVM. O exemplo a seguir gera os códigos MD5, SHA-1 e SHA-256 da mesma mensagem:

public static byte[] gerarHash(String frase, String algoritmo) {
  try {
    MessageDigest md = MessageDigest.getInstance(algoritmo);
    md.update(frase.getBytes());
    return md.digest();
  } catch (NoSuchAlgorithmException e) {
    return null;
  }
}
public static void main(String[] args) {
  String frase = "Quero gerar códigos hash desta mensagem.";
  System.out.println(stringHexa(gerarHash(frase, "MD5")));
  System.out.println(stringHexa(gerarHash(frase, "SHA-1")));
  System.out.println(stringHexa(gerarHash(frase, "SHA-256")));
}

A saída deste programa será:

51408e7592917e916b55f8021a0f7ad3
5907736c4de6fdd70fcdc7517c3aebd257a1addc
ed40c896d779f946956483d45e9efe08aac6373935d354c2be2136bf05bca42c