Ti rimando a questo.
http://java.sun.com/products/jce/reference/index.html
Per quanto riguarda il controllo su funzioni di hashing/codifica, bhè è vero: è stato dimostrato che md5 non è univoco (c'è il controesempio di certi cinesi con un paio di stringhe di un migliaio di caratteri ciascuna)... però, il rischio credo che sia accettabile.
Hai un limite massimo per la lunghezza delle stringhe che vai a codificare, oppure potrebbero essere di lunghezza qualsiasi?