zoukankan      html  css  js  c++  java
  • MD5与SHA散列单项加密

    MD5

      MD5的英文全称是Message Digest Algorithm MD5,译为消息摘要算法第五版,是众多哈希算法中的一种(哈希算法是一种可以将任意长度的输入转化为固定长度输出的算法)。因此MD5算法是一种哈希算法,严格来说不能称之为一种加密算法,但是它可以达到加密的效果,因此网络中会出现“MD5加密”这样的称呼。

    SHA

      安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。该算法经过加密专家多年来的发展和改进已日益完善,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。

    加盐

      明文密码的数据库泄漏了,用户的所有信息都是明文散列摆在黑客面前的,看似是密文,但黑客们创建了彩虹表这个东西,

      彩虹表就是一个庞大的数据库,这个数据库里收集了着咱们所有人常用的密码,以及这些密码对应的MD5值、SHA-X值等哈希值(当然还有别的各种哈希算法的哈希值,不止MD5和SHA-X),有了这个彩虹表,黑客就可以通过比对哈希值的方式(当然这个比对方式也在不断进步和加快)来根据密文密码得到明文密码。因此如果你的密码很不幸的刚好被搜集在这个表里面,就可能被破解掉,这也是为什么很多场合我们输密码的时候,总是提示我们要字母数字下划线大小写乱七八糟各种要求,目的就是尽量使得明文密码的复杂度增加一些,尽量使得明文密码及其哈希值不在彩虹表里。现在主流彩虹表的大小一般都是100G以上,你就可以想象它收集了多少数据。
      那就让用户还是输简单的密码吧,我们通过程序来把用户的简单密码变的复杂一些,然后再加密存储起来,当然验证的时候,用户输简单密码就能验证通过。这个过程就称之为加盐。加盐在密码学中就是指,在密码的任意位置插入一些指定的字符串(即盐值salt)的过程。加盐的目的就是为了增强密码的复杂度,从而使得密码及其哈希值不被收集在彩虹表里,使得用户的密码无法被破解。

    MD5与SHA-1比较

      因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:

      对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。

      对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。

      速度:在相同的硬件上,SHA-1 的运行速度比 MD5 慢。

    MD5与SHA-1安全性问题

      网上疯传消息山东大学的王小云教授通过碰撞法攻破了SHA1和MD5算法。其成果已经被Crypto大会中的科学家所认可,是否预示散列加密不安全?

      SHA和MD系列算法是一种基于散列算法的单向加密算法,也就是说明文一经加密(散列),密文就不可以再被恢复为明文。一般用于数字签名和简单认证。

      什么是散列呢?就是所谓的数字指纹。散列将任意长度的数据散列成定长的数据。这个定长的数据就是原始数据的摘要(指纹)。不同数据散列出来的指纹永远不同,而相同数据散列出来的指纹永远相同(理论上)。而且永远无法从散列后的数据恢复原始数据。

      散列的安全性是基于概率以及实际计算机能力的理论。因为,定长数据永远存在一个范围。这个范围就是其安全性的瓶颈。因为现在的计算机技术无法使用穷猜法测试每一个数据,所以在概率上认为散列出来的数据是独一无二的。(如果要完成MD5原始数据的穷猜法测试或者找出相同指纹但不同明文的数据大概需要3亿年)

      王教授的理论之所以能轰动全世界。特别是将全世界公认的MD5的安全性置之死地。是因为她发明了一种基于算法本身漏洞的算法。将测试时间极大减少,可在极短的时间内,就能找出一个指纹相同但明文不同的数据来。这就破坏了安全性的基点。

      但是,即使MD5的算法被攻破,但其并不一定变得不安全。王教授的碰撞法虽然能找出指纹相同的另一个数据。但这另一个数据的内容是不确定的。

      在许多场合,MD5和SHA1被用来实现数字签名,特别多的是签名一段人类文章或字符串。这些文章和字符串是被人类能够直接理解的信息。比如说签名电子邮件,签名交易信函等等。在这些场合中。MD5和SHA1还是安全的。其原因就是因为碰撞法无法确定那另一个数据的内容。

      比如说,在一电子邮件中,明文是 Hello,how are you?,经过MD5签名后指纹数据为A.虽然碰撞法能找到指纹数据也为A的另一段数据。但其内容只有极小的可能性也是一段人类可以理解的信息,比如说 Fuck you!,而更多的是一段乱码。这样的信息人类一眼就能识别出来其被破坏过。那也就不存在安全性丧失后的损失了。

      所以说,如果不能使用特定数据来伪造签名的话,就不存在安全性丧失的问题。因此,MD5和SHA1算法在一些场合中还是安全的。

  • 相关阅读:
    C#模拟POST表单提交 WebClient
    视频广告屏蔽器(附下载地址)
    SQL Server 不同数据库导入指定数据解决方案
    WinRAR(WinZip)压缩与解压实现(C#版Window平台)
    Visual Studio 扩展包(.vsix)制作
    ORM for Net主流框架汇总与效率测试
    文件删除小助手
    C# 控制台应用程序输出颜色字体[更正版]
    IE与IE内核浏览器的那点事
    where in的sql语句按照指定ID进行排序的解决方法
  • 原文地址:https://www.cnblogs.com/guanghe/p/10416467.html
Copyright © 2011-2022 走看看