MD5与SHA1

一、MD5

  MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。

  MD5算法是不可逆的,不能通过摘要信息得到原始数据。

MD5应用

编辑

一致性验证

MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如: [1] 
MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515
这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:
大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为司法机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。
我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。
具体来说文件的MD5值就像是这个文件的“数字指纹”。每个文件的MD5值是不同的,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”就会发生变化。比如下载服务器针对一个文件预先提供一个MD5值,用户下载完该文件后,用我这个算法重新计算下载文件的MD5值,通过比较这两个值是否相同,就能判断下载的文件是否出错,或者说下载的文件是否被篡改了。MD5实际上一种有损压缩技术,压缩前文件一样MD5值一定一样,反之MD5值一样并不能保证压缩前的数据是一样的。在密码学上发生这样的概率是很小的,所以MD5在密码加密领域有一席之地。但是专业的黑客甚至普通黑客也可以利用MD5值实际是有损压缩技术这一原理,将MD5的逆运算的值作为一张表俗称彩虹表的散列表来破解密码。
利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

数字签名

MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

安全访问认证

MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方面。如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。MD5将任意长度的“字节串”映射为一个128bit的大整数,并且是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的md5()函数重新设一个密码,如admin,把生成的一串密码的Hash值覆盖原来的Hash值就行了。
正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字节,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于Unix系统中,这也是为什么Unix系统比一般操作系统更为坚固一个重要原因。
二、SHA

概述

安全散列算法(SHA,Secure Hash)是一种常用的数据加密算法。它由美国国家标准与技术局(NIST)于1993年作为联邦信息处理标准公布(即第一代SHA算法SHA-0)。在1995年,其改进版本SHA一1也正式公布(SHA一1具有比SHA—0更高的安全性)。SHA-1算法是目前最常用的安全散列算法和最先进的加密技术。SHA-1算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单地理解为取一串输入码,把它们转化为长度较短、位数固定的输出序列即散列值(称为信息摘要)的过程。该算法对长度不超过2的64次方的消息产生160位的消息摘要输出,输入按512位的分组进行处理。  
SHA-1算法在加密学中扮演着极其重要的角色,可以用于实现数据保密、防止数据更改和身份验证等功能。一个典型的应用是从数字消息、IP信息包、磁盘文件等数据抽取散列值(称为消息摘要),井与对称或非对称加密技术一起来完成对原始数据的认证和完整性检查。另外,SHA-1算法是当今众多流行加密思想核心,几乎无处不在。它在许多安全协议中广为使用,如:数字签名标准(DSS)、传输层安全(TLS)、安全电子交易(SET),互联网协议安全(IPSec)、无线局域网(WLANs)安全、随机数生成算法和密码存储机制等。 [2] 

特性

SHA-1算法具有两个重要特性:单向性和抗碰撞性。
单向性即由原始消息计算出信息摘要很容易,而由消息摘要计算出原始消息在计算上则几乎是不可行的。
而所谓的抗碰撞性是指,要找到两个不同的原始消息生成同一个信息摘要在计算上也是不可行的。 [2] 

算法安全性

SHA-1算法是由MDS算法演变而来的,它们之间最大的区别在于前者产生的摘要长度比后者长32bit。SHA-1对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度为2160数量级的操作,较MDS的2128数量级操作要难。因此,SHA-1算法对抵抗强行攻击的强度很高。同时,因为SHA-1算法的循环步骤有80次,比MDS算法的64次要多,所以其运行速度也较慢。
从目前密码学研究的最新进展来看,SHA-1虽然被发现存在缺陷(碰撞),但在近几年内,仍然可以大量使用SHA-1算法。同时,专家们认为王小云等人发现当前所用的散列算法存在的问题,必将帮助新的散列算法设计者考虑到这方面的问题,使得新的散列算法具有更好的安全性。美国政府的大多数应用被要求在今年年底以前改用SHA-2散列函数系列,早期的应用也要尽可能地进行升级。SHA-2算法跟 SHA一1基本上相似,至今尚末出现对SHA-2算法的攻击。
三、MD5和SHA1对比

  由于MD5 与SHA-1均是从MD4 发展而来,它们的结构和强度等特性有很多相似之处,表(1)是对MD5 与SHA-1的结构比较。SHA-1与MD5 的最大区别在于其摘要比MD5 摘要长 32bit。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD5 是2128 数量级的操作,SHA-1 是2160数量级的操作。产生具有相同摘要的两个报文的难度:MD5是 264 是数量级的操作,SHA-1 是280 数量级的操作。因而,SHA-1对强行攻击的强度更大。但由于SHA-1 的循环步骤比MD5 多(80:64)且要处理的缓存大(160 比特:128 比特),SHA-1的运行速度比MD5 慢

  MD5 和SHA-1 是单项散列函数的典型代表,它们广泛地应用在信息安全和数字签名等各个领域。从而有效地抗击了信息的主动式攻击,本文基于AVR单片机实现了这两种算法,并结合汇编语言尽心了优化,取得了较好的效果。根据信息安全的要求的不同层次可以灵活选择这两种算法从而达到实际目的。



转载于:https://www.cnblogs.com/ostin/p/10382056.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java基本类型的默认值及其取值范围

转载于:https://www.cnblogs.com/billyu/p/5843845.html

tair client java_TFS(Taobao File System)Java Client 使用经验

TFS Java客户端的说明tfs-client-java版本选择:---------------------------------------tfs-client-java的版本有:release-2.0.0/tfs-with-large-2.1.1/tfs-client-java-2.1.3/release-2.2.2/release-2.2.3/release-2.2.4/release-2.2.6/最终我选用了tf…

DevExpress WinForms使用教程:图表控件 - 内置深入查询

【DevExpress WinForms v18.2下载】在最新发布的DevExpress WinForms v18.2中,DevExpress WinForms和ASP.NET图表控件引入嵌套系列模板的概念,是您能在不编写自定义代码的情况下深入查询图表。 Chart控件的嵌入式痕迹导航元素显示导航层次结构中各个数据…

AlfaLaval公司采用低速通风技术冷却数据中心

日前,瑞典热交换专家AlfaLaval公司推出了遵循低速通风原则的一系列数据中心冷却解决方案,其方案需要大量的风扇,而使空气以相当慢的速度流动,取得了与计算机机房空调(CRAC)一样有效的制冷效果。 该公司表示…

1.2 如何在visual studio 中建立C#程序

这一节简单介绍一下怎么在visual studio 2015中建立第一个C#程序,我使用的是2015版的visual studio,不同版本可能有一些差异,不过大体上是相同的,这些信息仅供新手参考,大牛请自动跳过。 首先双击visual studio 2015的…

javascript在html中的延迟与异步

1.相同点:延迟与异步都会同时加载script 2.不同点:延迟是script加载完成后,待HTML执行完毕后,才会接着执行script; 异步是script加载完成后,接着就执行该程序,HTML等到script完全执行完毕后&…

三星全速进军物联网 所有产品都将内置互联功能

韩媒报道,近日消息传出,三星电子的家电部门,当前生产的产品都将内建Wi-Fi。相关高层表示,此种做法可替更先进的功能预作准备,因为家电寿命较长,至少可用五年。目前为止,三星家电只有部分具备Wi-…

Python ValueError: IO operation on closed file

ValueError IO operation on closed file表示处理了已经被关闭的数据,在python 中 with语句的上下文会帮助处理,也就是说,当python的处理代码不对齐的时候会出现这种情况。例子如下: header那一行,突出,也就…

java面向字符的输入流_详细解读Java编程中面向字符的输入流

字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件。 Reader和Writer是java.io包中所有字符流的父类。由于它们都是抽象类,所以应使用它们的子类来创建实体对象,利用对象来…

任务信号量

在实际任务间的通信中,一个或多个任务发送一个信号量或者消息给另一个任务是比常见的,而一个任务给多个任务发送信号量和消息相对比较少。前面所讲的信号量和消息队列均是单独的内核对象,是独立于任务存在的。这两章要讲述的任务信号量和任务…

域名服务商GoDaddy第四季度扭亏为盈

2月18日消息,据财经网站MarketWatch报道,域名服务提供商GoDaddy周三公布了第四季度财报。公司期内利润与营收均好于预期,给出的营收指导亦符合预测水平。 财报显示,第四季度中GoDaddy营收同比增长14%,为4.254亿美元&am…

devexpress java_DevExpress使用心得一:换肤

最近要用到界面控件DevExpress。一句话:很好很强大,比起VS自带的winform界面,种类和花样要多了不少。然而,强力的功能带来了庞大的信息量,所以我打算通过一些小模块来和大家一起对它进行探讨和研究。今天先研究一下它的…

《低功耗蓝牙开发权威指南》——第3章低功耗蓝牙的体系结构

本节书摘来自华章社区《低功耗蓝牙开发权威指南》一书中的第3章低功耗蓝牙的体系结构,作者 (英)Robin Heydon,更多章节内容可以访问云栖社区“华章社区”公众号查看 第3章低功耗蓝牙的体系结构专注简单是我一直以来信奉的价值观。…

1970“变种”bug连WiFi热点iOS设备会变砖?

据悉,该漏洞和此前“1970”的bug有关系,但不完全一样。 威锋网讯,你还记得将 iOS 设备系统时间调至 1970.1.1 会让设备变砖的 bug 么?尽管苹果在 iOS 9.3 中已经将这个 bug 修复,但据安全研究员指出,他们发…

基础拾遗------webservice详解

基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗------接口详解 基础拾遗------泛型详解 基础拾遗-----依赖注入 基础拾遗-----数据注解与验证 基础拾遗-----mongoDB操作 基础…

java gc时自动收dump_Full GC分析:设置Java VM参数实现在Full GC前后自动生成Dump

本文讲解了如何设置JavaVM参数实现在FullGC前后自动生成Dump。共有三个VM参数需要设置:HeapDumpBeforeFullGC 实现在Full GC前dump。HeapDumpBeforeFullGC 实现在Full GC后dump。HeapDumpPath 设置Dump保存的路径设置这些参数的方法,这里总结了四种&…

jquery插件dataTables自增序号。

dataTables官网提供了一种方式,使用后没有达到预期效果(js报错),没有深究原因。如果需要,可以按照下面的方式来。 1 $(#dataList).dataTable({2 "language": {3 "sProcessing&…

Maven使用详解

1、maven介绍&#xff1a; 2、pom.xml文件理解&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schema…

java web junit_如何使用junit测试javaweb工程

一:创建一个测试类,建议将测试类单独放在一个包中(在 maven 项目里有测试类专门的存放位置),新建一个Junit Test Case类,下一步 测试类的命名建议是你将要测试的类名Test,然后点 Browse, 你可以选择要进行测试的类(一般选择 Service, 因为 Service 关心的是业务需求),用这种方式…

java代码_Java 代码实现排序算法

阅读本文约需要8分钟 大家好&#xff0c;我是你们的导师&#xff0c;我每天都会在这里给大家分享一些干货内容(当然了&#xff0c;周末也要允许老师休息一下哈)。上次老师跟大家分享了下SpringBootGradle MyBatisPlus3.x搭建企业级的后台分离框架的相关知识&#xff0c;今天跟大…