关于HASH和MD5 |
看来很多人对Hash算法还不是很理解。在这里,我简单的讲解一下。 首先简单的讲一下Hash算法和他的通途!可能大家看了以后,很多人可能都会发现自己 Hash算法不管是MD5也好SHA1也好. 他们都是一种散列算法,其算法的特点是,可以把任意长度的字符串经过运算生成固定长度的字符串,并且这个产生的字符串代表着原来字符串里的所有字符。 admin 加密后: 其中不管是16位也好,32位也好其生成的字符串8f00b204e9800998 (16bit)或者d41d8cd98f00b204e9800998ecf8427e(32bit)他们表示着admin这个原始字符串. 只要admin这个字符串没有变,不管怎样重复使用MD5或者SHA1进行重新运算,其结果保持不变。 利用这个特点,在计算机安全学上,我们使用这种算法来保证数据完整性(Integrity) 显而易见Hash算法,是用来保证 Integrity的算法。什么叫做完整性,不单单指数据不丢失,并且要保证数据没有被非法修改过。举个简单的例子。 比如:A 发了一个Email给B内容为"Hello",因为我们目前使用的以太网的特点,任何人在网络上都有可能截获这封Email,任何人都有可能,修改Hello这个字符串。那么当B收到这封A发来的Email的时候,怎么确定这封Email在传送过程中没有被修改过呢? 我们就使用了Hash算法来保证数据的完整性。他的工作方式是这样的: 1.A写一封Email内容为Hello 4.B接收到了A的Email,首先分离由2部分组成的邮件。 至此,保证了原始数据的完整性。 我相信很多在CSDN的开发者,他们为了实现向客户承诺的所谓的 Pravicy,他们在开发Web base应用的时候,使用了Hash算法。这样他们会对使用他们Webbase的应用的用户说:"你们在我这里的登陆密码是安全的,没有人能够知道。" 看上去好像想得很周到,其实,仔细想想,光光使用这种方法,如何保证用户的Pravicy呢? 说白了,就是形同虚设,光光使用Hash算法对用户的密码进行编码(所谓的加密)是没有什么很高的价值的。 谈了这么多,我相信大家应该理解Hash算法的用途了。现在我们来简单的谈一下,很多人很为之骄傲的山东大学王小云教授的关于什么MD5"解密"的新闻.(根据我刚刚看了山东大学的网页,据说她连SHA1,MD4都"解密"了). 请大家注意,我在解密上面放了引号!! 如果网上这么传,我只能说那些报道这则消息的新闻工作者的无知!(当然不能怪他们,因为他们不是计算机专业毕业的,而且报道的又是有关计算机安全学方面的东西。要知道在美国计算机安全学,是可以单独作为大学本科的一个专业的,里面有太多的东西需要学了。我现在讲得也只是皮毛而已。) 有点跑题了:P ...... 回过头,简单的讲一下王教授的碰撞法。 说到解密?王教授的方法不是用来解密的。所以传什么王教授可以解密MD5,将MD5的编码(所谓的加密)结果还原,这个是有点夸大了。没有这么传神的,那些说法用句时髦的话来描述叫做“传说中的解密” :D 王教授的碰撞法是利用了MD5或者SHA1算法的一个漏洞(我暂且叫做漏洞吧,没有考证过) 王教授所谓的碰撞法,碰撞的就是不同的字符串所产生的摘要信息是一样的那些字符串。因此得名碰撞法。 碰撞就是体现在这里。没有什么其它的传神的东西了。根据SHA1和MD5等Hash算法,在设计时候,设计这个算法的人认为不同的字符串要产生相同结果的摘要信息的可能性几乎为零。而王教授则证明了SHA1和MD5等Hash算法产生的摘要信息规则是可以在比较短时间内被破解的。这样一来,原始数据的 Integrity 就被打破了。 所谓的破解,也就是体现在这里。 如果大家还不明白,我再简单的用王教授的碰撞法给大家举个简单的例子。 还是拿我前面的例子,A给B写了个Email叫做Hello,然后通过王教授的碰撞法,可能得到Fuck这个字符串的摘要信息和Hello这个这个字符串产生的摘要信息是一样的。因此,在前面的这个例子中。如果B收到的Email内容为Fuck B也将认为是A发来的Email,并且没有被修改过! 看到这里,我相信很多目前在使用MD5或者SHA1等Hash算法的人来保证密码安全的人来说,应该考虑一下,是否应该继续使用目前的方法来保证安全了。 |
关于HASH和MD5,王小云教授的“解密”
最新推荐文章于 2024-07-10 17:10:45 发布