MD5: Java MessageDigest and MySQL

Ola a todos!

Eu estou tendo um problemazito. Estou a criar uma aplicação onde encripto as passwords dos utilizadores com o algoritmo sem função inversa MD5. Eis o código

public class PasswordUtils {    
    public static byte[] encriptPassword(String value) {
        return encriptPassword(value.getBytes());
    }

    public static byte[] encriptPassword(byte[] value) {
        MessageDigest m = null;
        try {
            m = MessageDigest.getInstance(PasswordUtils.ENCRIPTION_ALGORITHM);
        } catch (NoSuchAlgorithmException e) {
            System.err.println(e.getMessage());
            return null;
        }

        return m.digest(value);
    }
}

Mas agora estava a tentar criar um utilizador por defeito via script directamente na base de dados MySQL. Para isso utilizei a função do MySQL:

MD5('superadmin')

Acontece que estas duas funções produzem resultados direferentes. Alguem sabe porquê? O que estou a fazer de errado ou não estou a fazer?

Muito obrigado pela vossa atenção

Abraço

m = MessageDigest.getInstance("MD5");

Desculpa, voce tem razão. Eu esqueci-me de colocar ai uma linha.

public class PasswordUtils {
    private static String ENCRIPTION_ALGORITHM = "MD5";
    ..................
}

por exemplo no MySQL a funcao

select MD5("superman") devolve '84d961568a65073a3bcf0eb216b2a576'

mas em Java

new String(m.digest()) devolve: ?ÙaV?ea:;ϲ²¥v

é um pouco diferente

Já descobri pessoal, os 16 bytes gerados pelo MessageDigest têm que ser convertidos para 32 bytes:

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

Obrigado a todos