这个MD5即Message-Digest Algorithm 5(信息-摘要算法 5)的,这个是网络上广泛使用的散列(Hash)算法之一,就可以实现将任意长度的数值映射为固定长度的较小数值的。 这个MD5是一种常用的单向的Hash算法的的。它被广泛用于以下几个用途的: 1.检查数据是否一致: 比如相当多数据服务的,尤其是网盘服务,就是利用类似的做法来检测重复数据的,避免重复上传的。 2.存储用户密码: 这个将密码哈希后的结果存储在数据库中的的,以做密码匹配的。这是利用了其做为单向哈希的特点的,的从计算后的哈希值不能得到密码的。 3.校验数据正确性的: 这个将数据和数据哈希后的结果一并传输的,用于检验传输过程中数据是否有损坏的的。 那下面我们将说明为什么对于上面三种用途, MD5都不适用的了,也就是缺点: 这个第一个用途尤其可怕。这个用途的最大的问题的是,这个MD5在现实中已经被发现有相当多的数据都可能导致冲突的,真的!。 比如下两段数据的MD5哈希值就是完全一样的的: 这个第二个用途很容易遭到rainbow table攻击的的,那就和和明文存储密码的实质区别不大的的。 还有第三个用途里一般会在需要哈希的数据中混入某些秘密的的,也就是计算公式为md5(secret key + data)的。 但是这样并不适合用于验证数据的完整性的的。 |
|