`

为什么应该放弃或减少使用MD5

 
阅读更多

MD5即Message-Digest Algorithm 5(信息-摘要算法 5),是网络上广泛使用的散列(Hash)算法之一,可以实现将任意长度的数值映射为固定长度的较小数值。

  MD5是一种常用的单向Hash算法。它被广泛用于以下几个用途:

  1、检查数据是否一致。将两地存储的数据进行哈希,比较结果,如果结果一致就无需再进行数据比对。这是利用了其“抵抗冲突”(collision- resistant)的能力,两个不同的数据,其哈希值只有很小的几率一致。相当多数据服务,尤其是网盘服务,利用类似的做法来检测重复数据,避免重复上传。

  2、存储用户密码。将密码哈希后的结果存储在数据库中,以做密码匹配。这是利用了其做为单向哈希的特点,从计算后的哈希值不能得到密码。

  3、校验数据正确性。将数据和数据哈希后的结果一并传输,用于检验传输过程中数据是否有损坏。这是利用了很难找到两个不同的数据,其哈希结果一致的特点。

  下面我们将说明为什么对于上面三种用途, MD5都不适用。

  第一个用途尤其可怕。这个用途的最大的问题是,MD5在现实中已经被发现有相当多的数据都可能导致冲突。举例而言,如下两段数据的MD5哈希值就是完全一样的。

    数据 1 

    4d c9 68 ff 0e e3 5c 20 95 72 d4 77 7b 72 15 87
    d3 6f a7 b2 1b dc 56 b7 4a 3d c0 78 3e 7b 95 18
    af bf a2 00 a8 28 4b f3 6e 8e 4b 55 b3 5f 42 75
    93 d8 49 67 6d a0 d1 55 5d 83 60 fb 5f 07 fe a2

    数据 2

    4d c9 68 ff 0e e3 5c 20 95 72 d4 77 7b 72 15 87
    d3 6f a7 b2 1b dc 56 b7 4a 3d c0 78 3e 7b 95 18
    af bf a2 02 a8 28 4b f3 6e 8e 4b 55 b3 5f 42 75
    93 d8 49 67 6d a0 d1 d5 5d 83 60 fb 5f 07 fe a2

    输出相同的MD5 哈希

    008ee33a9d58b51cfeb425b0959121c9

  这意味着,如果用户提供数据 1,服务器已经存储数据 2。通过简单的MD5哈希方式检查重复,服务器上为用户保存的数据就是2。 接下来发生的事情大家都知道了,就是用户数据丢了!

  第二个用途很容易遭到rainbow table攻击,和明文存储密码的实质区别不大。更详细的分析可以察看这篇文章

  第三个用途里一般会在需要哈希的数据中混入某些秘密,也就是计算公式为md5(secret key + data)。 但这样并不适合用于验证数据的完整性。这是因为,从理论上上来说,如果知道md5(secret key +X),即使不知道secret key的内容, 仍然可能通过对X的分析,计算得到md5(secret key +Y),从而将X成功的替换成Y,导致接收方仍然认为数据是正确的。

分享到:
评论

相关推荐

    使用MD5进行加密的使用方法和程序

    使用MD5进行加密的使用方法和程序,Represents the abstract class from which all implementations of the MD5 hash algorithm inherit.

    md5tools_md5_md5tools_

    MD5助手是一款集合了MD5生成器和MD5比对工具,可以使用工具批量生成MD5值,可以对文件的MD5值进行校验比对,软件小巧精简,使用方便,支持拖放功能,支持单个或多个文件同时进行校验。

    md5检测工具

    essage Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and ...

    md5解密md5解密md5解密md5解密md5解密md5解密

    md5解密md5解密md5解密md5解密md5解密md5解密md5解密md5解密md5解密md5解密md5解密md5解密md5解密md5解密

    MD5 使用与jar包 java

    此为MD5的加密所需要的jar文件 MD5加密只需要此jar包 和如下代码将可获得加密结果,希望大家用的开心 //导入此import import cryptix.jce.provider.MD5; //MD5加密签名 String password ="1234567"; MD5 md5 = ...

    MD5编码、MD5加密解密demo

    MD5编码、MD5加密解密demo代码,详看博客 对字符串进行MD5编码及MD5加密和解密

    Spring boot 使用MD5加密字符串工具类

    该工具类使用于spring boot 开发,返回值为md5加密后的字符串,参数为字符串,一般用于加密密码。为了防止MD5加密的密码能被反译回明文。所以建议传入的密码字符串必须由数字字母和特殊字符组成。本人上传的表单验证...

    MD5加密解密生成器

    md5、md5(md5($pass))、md5(md5(md5($pass)))、MD5(MD5($pass)) MD5(MD5(MD5($pass)))、sha1、md4、mysql、mysql5、md5($pass.$salt) md5($salt.$pass)、md5(md5($pass)。$salt)、sha1...

    MD5前端加密js文件下载

    本MD5.js 共有6中加密方法:hex_md5(s), b64_md5(s) ,str_md5(s) ,hex_hmac_md5(key, data), b64_hmac_md5(key, data) ,str_hmac_md5(key, data).根据需求选择. js加密的好处: 1,用js对私密信息加密可避免在网络中...

    MD5 md5 md5加密

    MD5 md5.................

    md5计算md5计算md5计算md5计算md5计算

    md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算md5计算

    MD5的加密解密c#代码

    MD5加密解密工具,就我所知,MD5的目标是生成摘要。...据说有个叫王小云的女数学家破解了MD5算法,我觉得应该是看到一个MD5编码,就可以找到一个序列,生成的MD5编码刚好是被破解的那个MD5编码,这样的吧

    MD5.js js加密

    本MD5.js 共有6中加密方法:hex_md5(s), b64_md5(s) ,str_md5(s) ,hex_hmac_md5(key, data), b64_hmac_md5(key, data) ,str_hmac_md5(key, data).根据需求选择. js加密的好处: 1,用js对私密信息加密可避免在网络中...

    md5.ts egret直接使用的加密代码

    md5.ts egret直接使用的加密代码

    md5加密,原生js使用md5加密

    1、原生js登录,密码怕泄露,怕被人在控制台f12看见。使用md5加密。 2、后面会出一个登录,密码加密的博客。 3、免费下载,希望大家爱上学习。

    基于STM32的MD5参考程序

    本资源为基于STM32的MD5参考程序,根据程序生成选定文件的MD5校验值 本资源为基于STM32的MD5参考程序,根据程序生成选定文件的MD5校验值 本资源为基于STM32的MD5参考程序,根据程序生成选定文件的MD5校验值 本资源为...

    MD5加密MD5加密MD5加密

    MD5加密MD5加密MD5加密MD5加密MD5加密

    项目使用MD5—小例子

    项目使用MD5—小例子

    C++中MD5使用

    资源包括MD5工具、MD5 c++源码、例子程序。

    使用MD5对数据进行加密

    举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值...

Global site tag (gtag.js) - Google Analytics