记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

大谈MD5的碰撞问题

    其实MD5有没有碰撞是一个很简单的问题,稍微有点数学知识的人都应该可以想到,但是却常常为了这个问题被别人嗤之以鼻。看来主要原因可能是因为我不是名人,计算机水平太有限,在一个个所谓的大仙面前当然是不能服众了。但很遗憾,这的的确确是一个数学问题。

    MD5的算法我是不清楚的,但是通过排列组合来看就可以知道它的结果会不会有碰撞了。举一个最简单的例子。MD5的加密结果是一个32位的16进制数,那么组成这个字符创的字符就只能为[0-9a-f]16个字符,从这一点上来看MD5的加密结果多可能性就是16^32(16的32次方)。

    那个一个普通字符串的可能性呢,现在我们就只考虑这个字符串是由字母和数字构成的[a-z0-9],那么一位长度的字符的可能性:36^1
    长度为2的:36^2
    长度为3的:36^3
    长度为4的:36^4
    长度为5的:36^5
    长度为6的:36^6
    长度为7的:36^7

    以此类推,长度小于等于32的字符串的可能性为36^1+36^2+36^3+....+36^32,相对于这个来说,MD5的加密结果是一个很有限的数量。仅就一个小于32位的字符创来说碰撞就是不可以避免的,那么对于长字符串MD5又岂能完全胜任,所以个人觉得MD5用到密码保护上还是可以的,但是要MD5的结果作为一个唯一标识,还是存在很大的隐患的。

« 上一篇 | 下一篇 »

Trackbacks

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

1条记录访客评论

如何给BASICA穿上VB外衣。请指教。谢谢。

Post by LWJ on 2006, June 28, 10:39 AM 引用此文发表评论 #1


发表评论

评论内容 (必填):