C'è stata un po' di confusione in questo thread credo.

L'op voleva solo sapere come ottenere una stringa stampabile per un md5.

Da che mondo e mondo si stampano i 16 bytes dell'md5 in esadecimale, ottenendo quindi una stringa di 32 caratteri.

Un modo semplice e sbrigativo è sostiture la riga:
return new String(md5);
con
return String.format("%032x", new BigInteger(1, md5));

(importa java.math.BigInteger)

Ciao.