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算法在一些场合中还是安全的。

MD5与SHA散列单项加密的更多相关文章

  1. shiro中自定义realm实现md5散列算法加密的模拟

    shiro中自定义realm实现md5散列算法加密的模拟.首先:我这里是做了一下shiro 自定义realm散列模拟,并没有真正链接数据库,因为那样东西就更多了,相信学到shiro的人对连接数据库的一 ...

  2. (转)DES、RSA、MD5、SHA、随机生成加密与解密

    一.数据加密/编码算法列表   常见用于保证安全的加密或编码算法如下:   1.常用密钥算法   密钥算法用来对敏感数据.摘要.签名等信息进行加密,常用的密钥算法包括:   DES(Data Encr ...

  3. DES、RSA、MD5、SHA、随机生成加密与解密

    一.数据加密/编码算法列表   常见用于保证安全的加密或编码算法如下:   1.常用密钥算法   密钥算法用来对敏感数据.摘要.签名等信息进行加密,常用的密钥算法包括:   DES(Data Encr ...

  4. SHA安全散列算法简析

    1 SHA算法简介 1.1 概述 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散 ...

  5. DES,AeS加解密,MD5,SHA加密

    1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...

  6. Shiro+springboot+mybatis(md5+salt+散列)认证与授权-01

    这个小项目包含了注册与登录,使用了springboot+mybatis+shiro的技术栈:当用户在浏览器登录时发起请求时,首先这一系列的请求会被拦截器进行拦截(ShiroFilter),然后拦截器根 ...

  7. shiro进行散列算法操作

    shiro最闪亮的四大特征:认证,权限,加密,会话管理 为了提高应用系统的安全性,这里主要关注shiro提供的密码服务模块: 1.加密工具类的熟悉 首先来个结构图,看看shiro提供了哪些加密工具类: ...

  8. [转]c# 对密码执行散列和 salt 运算方法

    本文转自:http://www.cnblogs.com/CnBlogFounder/archive/2008/07/04/1235690.html 大家对密码执行散列和Salt运算一定不陌生.两个Vi ...

  9. Java 消息摘要 散列 MD5 SHA

    package xxx.common.util; import java.math.BigInteger; import java.security.MessageDigest; import jav ...

随机推荐

  1. linux shell脚本检测硬盘磁盘空间 邮件报警

    使用 http://www.weiruoyu.cn/?p=368 shell脚本监控硬盘空间剩余空间 邮件报警 1.先观察一下磁盘,和如何使用脚本 [root@localhost ~]# df -h ...

  2. ida+gdb调试任意平台

    原创链接:http://www.cnblogs.com/fply/p/8493504.html 仅做个记录,希望能帮到大家. ida+gda基本可以通杀所有平台,目前自己试了ios和ubuntu系统都 ...

  3. UVALi 3263 That Nice Euler Circuit(几何)

    That Nice Euler Circuit [题目链接]That Nice Euler Circuit [题目类型]几何 &题解: 蓝书P260 要用欧拉定理:V+F=E+2 V是顶点数; ...

  4. c#除掉字符串最后一个字符几种方法

    有一数组:转换为字符串后为 aaa|bbb|ccc|ddd| 现要去掉最后一个| 第一种方法: 语句为:str1=aaa|bbb|ccc|ddd| str=str1.substring(0,lasti ...

  5. Maven的作用、用途、内涵、愿景

    maven被许多人认为是一个构建工具.许多人最初是从熟悉ant而转到maven的,因此很自然地这样认为maven是一个构建工具.但是maven并不仅仅是一个构建工具,也不是ant的一个替代工具.mav ...

  6. session_start 统计实时访客人数

    void Session_Start(object sender, EventArgs e) { Application.Lock(); Application["OnLine"] ...

  7. 2.scrapy安装

    A.Anaconda如果已安装,那么可以通过 conda 命令安装 Scrapy,安装命令如下: conda install Scrapy   ============================ ...

  8. 计算属性(computed)、方法(methods)和侦听属性(watch)的区别与使用场景

    1,computed 能实现的,methods 肯定也能够实现. 2,不同之处在于,computed 是基于他的依赖进行缓存的,computed 只有在他的的相关依赖发生改变的时候才会重新计算. 如果 ...

  9. Java WEB 笔记

    1. 部署并启动 tomcat 服务器 1). 解压 apache-tomcat-version 到一个非中文目录下 2). 配置一个环境变量,JAVA_HOME(指向 JDK 安装目录)或 JRE_ ...

  10. c# 静态方法和数据

    c#所有方法都必须在类的内部声明,但如果把方法或者字段声明为static就可以使用,类名代用方法或者访问字段. 在方法中声明一个静态变量a 和一个静态的aFun方法.下面是在主函数中调用. 从上图可以 ...