Does anyone know of a decent, hard to reverse algorithm for turning text into a key containing numbers and letters?.. Ideally, this algorithm will produce a key of about 12 chars long and have a good chance of producing a unique key.

I've considered MD5, but there appear to be lots of sources which claim to be able to obtain md5 encrypted passwords if they have the resulting hash.. While I'm not overly worried about this, I would like an algorithm which is fairly reverse-proof.

Failing that, is there a set of functions in FreePascal/Turbo Explorer for MD5? ie.e cross platform and ones I don't have to code myself