首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

所有的字符串生成的MD5值是唯一的吗,该怎么处理

2012-03-20 
所有的字符串生成的MD5值是唯一的吗我一直没搞明白这个问题网络上很多人都说所有的字符串生成的MD5值是唯

所有的字符串生成的MD5值是唯一的吗
我一直没搞明白这个问题 
网络上很多人都说所有的字符串生成的MD5值是唯一的,但是我还是不相信,原因如下:
任何字符串 str MD5后都得到一个定长的字符串 mdstr(32个字节) 但是str的长度却是没限制的 
mdstr 是有限个16进制位组成的,所能代表所有字符串的可能只有16的32次方(如果是32位) 而原来字符串的长度和内容是没限制的 也就是说问题在于 16^32组字符串 是怎么和无穷组字符串一一对应起来的

[解决办法]
所有字符串生成的md5值是唯一的,这话没错……
但是同一个md5值,可能由不同的字符串产生……

字符串->md5值
这是一个满射,但不是单射……
[解决办法]
md5算法保证
根据md5找生成他的 字符串 集 的 复杂度=穷举
[解决办法]
MD5只是碰撞率低……
不是独一无二……
[解决办法]

探讨
我一直没搞明白这个问题
网络上很多人都说所有的字符串生成的MD5值是唯一的,但是我还是不相信,原因如下:
任何字符串 str MD5后都得到一个定长的字符串 mdstr(32个字节) 但是str的长度却是没限制的
mdstr 是有限个16进制位组成的,所能代表所有字符串的可能只有16的32次方(如果是32位) 而原来字符串的长度和内容是没限制的 也就是说问题在于 16^32组字符串 是怎么和无穷组字符串一一对应起来的

热点排行