网站大量收购独家精品文档,联系QQ:2885784924

MD5安全性及相关知识.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MD5安全性及相关知识

MD5安全性及相关知识 最近各大网站的用户数据被泄露的新闻炒得沸沸扬 扬,刚好与朋友无意间谈起了加密、解密的问题。从事IT职业的很多人都应该知道MD5加密,MD5加密是现在网站中应用很广泛的Hash算法之一。它可以 将用户密码加密为128位的长整数。数据库并不明文存储用户密码,而是在用户登录时将输入密码字符串进行MD5加密,与数据库中所存储的MD5值匹配。 因此,MD5用作密码加密算法并不是绝对安全的。因为可以通过生成已知字符串的字典去Hash碰撞查找到。 互联网上有几个MD5解密的网站,大多数的做法是用户输入MD5转换后的值(叫哈希值)与网站中数据库进行对比,从而查询到对应的字符串。 而MD5是Hash算法之一,它的意义在于提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,(每一个真实值只能有一个 键值,但是一个键值可以对应多个真实值,即将数据离散化,以方便存取),这样可以快速在数组等数据结构中存取数据。【此解释来源于百科】 也就是说MD5不是简单的古典加密算法,不能通过逆向Decrypt解密,只能通过Hash碰撞破解(Hack)。 所在,在论理上来说,MD5密码是可以破解的。只要字典够大,计算机运行速度够快。 至于最近各大网站数据库泄露事件,而且被报料称数据库存储的还是明文的。若被攻击者拿到数据库后,用户的密码也根本无需破解了。这件事提醒我们对网站数据库中所保存的用户密码进行加密的重要性。 在这里,我也来说一下我的做法,之前项目中也应用过: 通常用户密码都是MD5加密后存储到数据库,若是数据库被泄露,通过Hash碰撞也是能够破解的。所以,我们可以适当的修改MD5加密算法或方式。(如把字符串多次MD5等方式。当然,你的方式同样不能泄露出去) 下面收藏一下关于MD5的相关知识: 对于散列函数h(x),必须满足下列特性 [1]: 压缩:对于给定输入x,输出长度y=h(x)很小; 效率:对于给定输入x,计算y=h(x)很容易; 单向:该散列函数H是一个单向函数,即对于几乎所有的x,已知H(x)的值y求x是不可行的; 弱无碰撞:已知x,求出x’使得H(x’)==H(x)在计算上是不可行的; 强无碰撞:对于任意x≠x’,H(x’)==H(x)在计算上是不可行的。 MD5的全称是Message-Digest Algorithm 5,在1991年由MIT 的Ronald L. Riverst提出,由MD4演化而来,最终生成128位(4个32位的16进制数)的信息摘要算法。 [2]MD5算法是一个不可逆的字符串变换算法,即看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串。 1993年,Den Boer和Bosselaers给出了一个有限的“伪碰撞”结果; 1996年,MD5算法的设计被发现有缺陷,虽然当时并未被证明该缺陷是致命的,密码学专家建议使用其它加密算法(如SHA-1)。 2004年,MD5算法被证明不安全,原因是会产生Hash碰撞。[3] 2007年,研究人员发现使用Chosen-prefix Collision方法,可以使包含恶意代码的程序产生合法的MD5值。 2008年,研究人员发现了产生相同MD5 Hash值的两个可执行文件。 以上实例证明,MD5算法的安全性并不高,不能应用于对安全性要求很高的SSL加密及数字签名之中。目前最被推荐的Hash加密算法应为SHA-2加密算法。 MD5算法描述 MD5算法针对不定长的输入,可以输出固定128位长度的加密信息。MD5以512位来分组输入的信息,每一分组又被划分为16个32位子分组,经过算法流程最终生成四个32位数据联合成为128位的散列。 算法的具体过程如下: (1)信息进行填充,使其位长对512求余的结果等于448。将信息的长度扩展至N*512+448,其中N为一个非负整数,N可以是零。填充的方法为在信息的后面填充一个1和无数个0,直到满足条件。 (2)在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息的位长=N*512+448+64= (N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。MD5中有四个32位被称作链接变量 (Chaining Variable)的整数参数,他们的初始值分别 为:A=0B=0xefcdab89,C=0x98badcfe,D=0 (3)进入算法的四轮主循环运算。循环的次数是信息中512位信息分组的数目。主循环有四轮,每轮循环都很相似。第一轮进行16次操作。每次操作对 a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向左环移一个不

文档评论(0)

cgtk187 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档