信息摘要技术及算法介绍

数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。

数据摘要算法也被称为哈希(Hash)算法、散列算法;

特点
消息摘要算法(杂凑算法,哈希算法)的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。

1.无论输入的消息有多长,计算出来的消息摘要的长度总是固定的;
2.消息摘要看起来是“随机的”,一般随机都是伪随机;
3.一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同(潜在意思是可以相同);但相同的输入必会产生相同的输出;
4.消息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息;
5.好的摘要算法,没有人能从中找到“碰撞”,但是“碰撞”是肯定存在的。
应用
一般地,把对一个信息的摘要称为该消息的指纹或数字签名,信息摘要算法的主要用途是信息完整性校验,就好比我们买菜,肯定都希望称一下买的菜分量是否足够。

在计算机领域,我们也希望能知道别人传递的消息是否完整是否被篡改了,这里就用到信息摘要算法。

信息摘要算法常常被用来保证信息的完整性,防止信息在传输过程中被篡改(无法确定信息是否被监听),也就常说的验签。

举例:我们传递password时,需要将password加salt后做信息摘要,接收方核对摘要,相同则接受处理,不相同则认为本次的password传输过程中被篡改,拒绝本次请求。

#算法家族:
信息摘要算法来源于CRC算法,最初CRC算法是用来验证数据完整性的,即我们常见的奇偶校验码、循环冗余校验,在CRC基础上发展处了MD和SHA量大算法家族,CRC比这些算法都要早,MD算法比SHA算法早,SHA算法是对MD算法的改进。再后来则发展出了可以带有密码的信息摘要算法-MAC算法。

信息摘要算法包括三大类,MD、SHA和MAC算法,MD的分类是按照版本规定的,SHA则是按照适用的消息长度分类的:

MD算法: Message Digest Algorithm ,目前主流的是MD5算法,为第五版算法,之前有MD2、MD3、MD4算法。
SHA算法:安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA);
MAC算法:带有密码信息的信息摘要算法,是对MD和SHA算法的演变和改进,包括HmacMD2、HmacMD4、HmacMD5、HmacSHA-256等。
下表是主要的信息摘要算法的特点比较,关于MD5、SHA1等算法的具体过程,非安全、算法专业人士可不学习,如有需要可以参考下面的blog:

http://blog.csdn.net/lonelyroamer/article/details/7652320

算法供应商
美国对于算法出口有着严格的限制,Sun公司限于美国算法出口法律的限制和本身的一些原因,并有提供特别全面的算法支持,不过Sun提供SPI方式用来可以透明的接入其他算法供应商,也可以直接使用其他算法供应商的jar包工具。

在Java中主要的算法供应商有三类:Sun本身的算法,包含在JDK中,大部分在JDK 1.6之后,Bouncy Castle和Commons Codec。

Sun算法:sun的算法也使用Java SPI机制提供,通过Securty.addProvider()可以注册算法实现;
Bouncy Castle:开源加密组件,提供了很多JDK 6不支持的算法。
Commons Codec:也是开源组件,是Apache的项目,Apache的Commons项目应该广泛,简单易用,目标是提高Java Api的易用性。
算法选择
CRC算法不属于加密场景,比较古老,但是在数据压缩领域被广泛使用作为完整性校验;
MD算法中MD5算法最流行,也是目前最流行的信息摘要算法,是大部分系统的首先,虽然MD算法破解门槛越来越低,但是一般应用足够了;
SHA算法枝繁叶茂,比MD算法安全性高,尝尝用在一些安全性系数要求较高的环境,目前也逐渐替代MD5算法,用在注册、登录模块,在数字证书的签名算法中,SHA算法更广泛。
MAC算法是带有密钥信息的信息摘要算法,吸收了MD和SHA的精髓,安全程度更高。
————————————————
版权声明:本文为CSDN博主「赛小文」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HackerSaillen/article/details/64906881

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

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

相关文章

AutoLayout的那些事儿

AutoLayout非常强大也非常易用,可读性也很强,加上各种第三方AutoLayout库,让你布起局来犹如绷掉链子的狗!根本停不下来!以前的 1label.frame.origin.y label.frame.size.height 10如今只用: 123button.sn…

docker-compose下载慢_编写Docker Compose时要注意的五大常见错误

在构建容器化的应用时,开发人员往往需要某种方法来引导启动目标容器,以对其进行代码级别的测试。尽管业界有许多方法可以实现该目的,但Docker Compose是目前最受欢迎的一种方法。它能够让如下两个方面变得容易实现:指定在开发过程…

前端测试利器--Browser-Sync启动命令

使用browser-sync启动命令cmd切换到项目的根目录下**1.browser-sync start --server --files "css/*.css"----------**使用两个*检测所有的目录**转载于:https://blog.51cto.com/1888512/1862054

VMware实现Android x86 8.1 从安装到使用

VMware实现Android x86 8.1 从安装到使用 虚拟机--Android 安装 Android系统配置 安装软件 个性化设计 托坑指南 一些终端模拟器的指令 虚拟机–Android 发现现在安卓虚拟机已经到了8.1,我就试试能不能安装并正常使用。由于版本过新,网上也没有一些系统的…

frame越过另一个frame_拥抱swoole(三)之用php实现一个混合服务器

混合服务器,就是可以同时支持http,websocket,tcp等的服务器,用swoole就是这么简单,分分钟,就可以愉快地搞物联网开发了,啥都支持,我采用官方的例子,创建一个混合服务器&a…

Hibernate学习系列————注解一对多单向实例

2019独角兽企业重金招聘Python工程师标准>>> 开发环境:MysqlEclipse 一对多单向的列子原理:一个班级,多个学生,学生端为多的一端,他们拥有一个外键指向相同的班级。 项目结构 需要的jar包 hibernate.cfg.xm…

Spring学习笔记--自动装配Bean属性

Spring提供了四种类型的自动装配策略: byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中。byType – 把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中。constructor – 把与Bean的构造器入参具有相同类型的其他…

sudo apt-get nmap 报错锁占用

在Ubuntu中用apt-get命令安装软件是出现如下错误: 网上搜了一下原因,说是有另外一个程序在运行,导致锁不可用,原因可能是赏析运行更新或安装没有正常完成。这是因为上次更新或者安装没有正常完成。 网上的两种解决方法&#xff1…

python逐行读取txt写入excel_用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)...

前几天接到一个任务,从gerrit上通过ssh命令获取一些commit相关的数据到文本文档中,随后将这些数据存入Excel中。数据格式如下图所示观察上图可知,存在文本文档中的数据符合一定的格式,通过python读取、正则表达式处理并写入Excel文…

筋斗云newcloud错误码列表

响应码信息备注440Ip Error客户送IP错误441Callee Number Error被叫号码位数错误(标准11位正确,错误加前缀0,或其他前缀)442Called Operator Error被叫运营商错误(支持移动,不支持联通电信)443N…

Extjs 之 initComponent 和 constructor的区别(转)

在创建自定义类时,先构造(constructor)后初始化(initComponent)。如:(在旧的Extjs 版本中使用 Ext.extend 实现扩展) Ext.define(Btn,{ extend:Ext.button.Button, init…

hive遍历_从Hive中的stored as file_foramt看hive调优

一、行式数据库和列式数据库的对比1、存储比较行式数据库存储在hdfs上式按行进行存储的,一个block存储一或多行数据。而列式数据库在hdfs上则是按照列进行存储,一个block可能有一列或多列数据。2、压缩比较对于行式数据库,必然按行压缩&#…

oracle sql语句 从指定条数查询

现有表A 查询从第10行之后的数据 select a from ( select a, rownum r from A ) where r > 10 order by r; 实际工作中例子 select account,acct_name from ( select account, acct_name, rownum r from pmctl_nonsleep_acct ) where r > 10 order by

帮助孩子学会感恩_页数204_出版日期2015.03_完整版PDF电子书下载

帮助孩子学会感恩_页数204_出版日期2015.03_完整版PDF电子书下载 带索引书签目录高清版_13813212 下载链接http://pan.baidu.com/s/1geEmUeZ 【作 者】(英)蒂姆惠特尼(TimWhitney)著【丛书名】陪孩子成长系列丛书【形态项】 204 …

xwpftablecell设置字体样式_HTML的文字样式

font 属性可以用来作为 font-style, font-variant, font-weight, font-size, line-height 和 font-family 属性的简写,或将元素的字体设置为系统字体。字体修改font-family 属性:设置HTML页面中的字体font-size 属性:设置字体大小font-weight…

将中文标点符号替换成英文标点符号

/// 转全角的函数(SBC case) /// ///任意字符串 /// 全角字符串 /// ///全角空格为12288,半角空格为32 ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 ///public string ToSBC(string input) { //半角转全角:char[] cinput.ToCh…

Centos6.5升级GCC

由于CentOS自带的gcc实在是老掉牙了,所以决定升级一下gcc,下面介绍如何进行源码编译,升级gcc。 从GNU网站下载你想要的gcc版本,链接:ftp://ftp.gnu.org/gnu/gcc/,选择合适的gcc版本,然后下载&am…

oracle sql语句 exists

exists 这个关键字只是个查询条件 用来判断后面跟的查询语句是否查找到记录 查找到为真 反之为假 例子 select * from ammst_corp a where account 999999999999999999 and exists ( select 1 from pmrgt_unit where unit_code a.open_unit ) 查找 9999999999999999…

python金字塔_高斯金字塔与拉普拉斯金字塔的原理与python构建

高斯金字塔和拉普拉斯金字塔【1】在图像相关领域应用广泛,尤其是图像融合和图像分割方面。本文从理论和opencv实现两个方面对两种金字塔进行了介绍,并给出了二者的视觉效果。1、高斯金字塔在计算机视觉与图像处理相关任务中,经常需要使用同一…

mongodb在32位机的连接

Windows 32bit版本安装Mongodb时,会发生的下面问题 2016-05-09T00:09:45.1240800 I STORAGE [initandlisten] exception in initAndListen: 28663 Cannot start server. The default storage engine wiredTiger is not available with this build of mongod. Pleas…