MD5 algorithm written by Paul Johnston