How to Break MD5 and Other Hash Functions