您正在混合两种不同的哈希值用法:
校验和防止随机(非恶意)错误.
计算用于存储密码,签名消息,证书的加密消息摘要......
CRC对于第一个应用程序来说是一个不错的选择,但完全不适合第二个应用程序,因为它很容易计算碰撞(在数学上说:CRC是线性的).这是你的朋友基本上告诉你的.
MD5和SHA1是用于第二种应用的加密哈希.但是,MD5已被破解,SHA1最近被认为是弱的.尽管如此,即使MD5可以被破解,也需要很长时间才能找到MD5碰撞(几天到几周).
至于salt,它通过混合一些随机的非机密值来计算加密散列本地,这个值称为salt.这可以防止计算全局表,从而可以很容易地从散列值计算可能的值(例如密码).表的计算非常昂贵,但如果没有盐,成本将通过许多破解的密码进行摊销.
如果摘要函数已被破坏,向哈希函数添加盐实际上没有任何作用,因为盐必须公开才能使用,并且攻击者也可以调整他们的文件以将其考虑在内。
解决这个问题的方法是使用安全哈希函数。MD5 已被证明容易受到哈希冲突的影响,但我相信 SHA-1 还没有(到目前为止)。