想很多认证,支付宝接口,网银接口等,都是使用MD5计算密匙 sign来进行身份权限认证的,那有没有可能不同的字符串MD5出来的值相同呢?
换句话说,对于同一字符串,MD5是不是唯一的?
想很多认证,支付宝接口,网银接口等,都是使用MD5计算密匙 sign来进行身份权限认证的,那有没有可能不同的字符串MD5出来的值相同呢?
换句话说,对于同一字符串,MD5是不是唯一的?
你这个换句话说……换的两个概念都不一样了,一个是多个字符串是否对应一个MD5,一个是字符串是否对应多个MD5。
好吧,回到问题,确实,存在多个字符串对应一个MD5的情况,这种情况叫做哈希冲撞。毕竟MD5只是摘要,不论多长的字符串都能散列到一个固定的长度,原字符串的长度是不限的,如果不出现冲撞,那就不符合客观规律了。
那再看回来,既然为什么MD5会出现重复,为什么还会选择这个来进行密码的加密呢?
首先,一般的密码长度都会有长度的限制,而且基本都会小于MD5散列结果的长度,这就让MD5唯一有了条件。而MD摘要经过了几代的演进发展到MD5,其主要优化的,就是散列的分散性,这个分散性的体现,就是避免冲撞的发生。所有使用在密码加密上还是有可靠保障的。
可以啊,王小云当年不是有过这么一篇任意构造md5的论文么,不过貌似后来被封杀了,现在网上流传程序都是让两个不同文件拥有相同md5,以前过360云查杀就是这么干的,把木马跟正常文件用程序处理一下,将正常文件发给360进行核对,然后嘿嘿
特意看了下百科:
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
所以同一字符串加密后的值肯定是相同的。
至于实现,有人在wikipedia上贴了段“伪代码”
https://zh.wikipedia.org/wiki/MD5