单向散列函数解析

目录

1. 概述

2. 单向散列函数的性质

2.1 根据任意长度的消息计算出固定长度的散列值

2.2 能够快速计算出散列值

2.3 消息不同散列值也不同

2.4 具备单向性

3. 单向散列函数的算法

3.1 MD5

3.2 SHA序列

3.3 SM3


1. 概述

        针对计算机所处理的消息,有时候我们也需要用到“指纹”。当需要比较两条消息是否一致时,我们不必直接对比消息本身的内容,只要对比它们的“指纹”就可以了。使用单向散列函数就可以获取消息的“指纹”,通过对比“指纹”,就能够知道两条消息是否一致。

        单向散列函数(one-way hash function)有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash value)。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。

        单向散列函数也称为消息摘要函数(message digest function )、哈希函数或者杂凑函数。

        输入单向散列函数的消息也称为原像(pre-image)。

        单向散列函数输出的散列值也称为消息摘要(message digest )或者指纹(fingerprint )。

        这里的消息不一定是人类能够读懂的文字,也可以是图像文件或者声音文件。单向散列函数不需要知道消息实际代表的含义。无论任何消息,单向散列函数都会将它作为单纯的比特序列来处理,即根据比特序列计算出散列值。

        散列值的长度和消息的长度无关。无论消息是1比特,还是100MB,甚至是100GB,单向散列函数都会计算出固定长度的散列值。以SHA-256单向散列函数为例,它所计算出的散列值的长度永远是256比特(32字节)。

2. 单向散列函数的性质

2.1 根据任意长度的消息计算出固定长度的散列值

        首先,单向散列函数的输入必须能够是任意长度的消息。其次,无论输入多长的消息,单向散列函数必须都能够生成长度很短的散列值,如果消息越长生成的散列值也越长的话就不好用了。从使用方便的角度来看,散列值的长度最好是短且固定的。

2.2 能够快速计算出散列值

        计算散列值所花费的时间必须要短。尽管消息越长,计算散列值的时间也会越长,但如果不能在现实的时间内完成计算就没有意义了。

2.3 消息不同散列值也不同

        为了能够确认完整性,消息中哪怕只有1比特的改变,也必须有很高的概率产生不同的散列值。

        如果单向散列函数计算出的散列值没有发生变化,那么消息很容易就会被篡改,这个单向散列函数也就无法被用于完整性的检查。两个不同的消息产生同一个散列值的情况称为碰撞(collision)。如果要将单向散列函数用于完整性的检查,则需要确保在事实上不可能被人为地发现碰撞。

2.4 具备单向性

        单向散列函数必须具备单向性(one-way)。单向性指的是无法通过散列值反算出消息的性质。根据消息计算散列值可以很容易,但这条单行路是无法反过来走的。

3. 单向散列函数的算法

3.1 MD5

  • MD5即Message-Digest Algorithm 5;
  • MD5输入以512位的分组进行处理,输出为定长的128比特的消息摘要;
  • MD5由MD4、MD2改进而来,散列算法只能单向工作;
  • MD5的强抗碰撞性已经被攻破,也就是说,现在已经能够产生具备相同散列值的两条不同的消息,因此它已经不安全了。

3.2 SHA序列

  • SHA即Secure Hash Algorithm
  • SHA家族有:SHA-1、SHA-2(SHA-256、SHA-384、和SHA-512)、SHA-3。
  • SHA-1是由NIST(National Institude of Standards and Technology,美国国家标准技术研究所)设计的一种能够产生160比特的散列值的单向散列函数;SHA-1的强抗碰撞性已经被攻破,因此它也已经不安全了。
  • SHA-256、SHA-384、和SHA-512也是由NIST设计的单向散列函数,它们的消息长度分别为256比特、384比特、512比特,这些单向散列函数合起来统称为SHA-2。
  • SHA-3:是一种作为新标准发布的单向散列函数算法,用了替代在理论上已经被找出攻击方法的SHA-1算法。全世界的企业和科学家提交了很多SHA-3的候选方案,经过长达5年的选拔,最终于2012年确定将Keccak算法作为SHA-3标准。Keccak最终被选为SHA-3的理由如下:(1)采用了与SHA-2完全不同的结构,(2)结构清晰,易于分析,(3)能够适用于各种设备,也适用于嵌入式应用,(3)在硬件上的实现显示出了很高的性能,(4)比其他最终候选算法安全性边际更大。
  • SHA-3的出现并不意味着SHA-2就不安全了,在一段时间内,SHA-2和SHA-3还将会共存。

3.3 SM3

  • SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布,相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。
  • 在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。据国家密码管理局表示,其安全性及效率与SHA-256相当,消息长度也是256比特。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GitLab、jenkins

Gitlab服务器:192.168.10.20 jenkins服务器:192.168.10.30 web应用服务器:192.168.10.100 通过容器部署gitlab: 安装容器管理软件podman 修改主机的22端口,该gitlab软件包中会使用到该端口 gitlab容器需要使用/etc/res…

Thinkphp起名网宝宝起名网站源码

Thinkphp起名网宝宝起名网站源码 源码介绍 1.宝宝在线起名 2.八字起名,周易取名 3.一对一起名 5.支持手机wap 链接数据库地址:Application\Common\Conf 修改里面config.php数据库连接,导入sm.sql数据库文件即可 伪静态用thinkphp 后台…

Centos部署openGauss6.0创新版本,丝滑的体验

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

主流框架选择:React、Angular、Vue的详细比较

目前前端小伙伴经常使用三种广泛使用的开发框架:React、Angular、Vue - 来设计网站 Reactjs:效率和多功能性而闻名 Angularjs:创建复杂的应用程序提供了完整的解决方案,紧凑且易于使用的框架 Vuejs:注重灵活性和可重用…

Java | Leetcode Java题解之第155题最小栈

题目&#xff1a; 题解&#xff1a; class MinStack {Deque<Integer> xStack;Deque<Integer> minStack;public MinStack() {xStack new LinkedList<Integer>();minStack new LinkedList<Integer>();minStack.push(Integer.MAX_VALUE);}public void …

【ComfyUI】图像重绘/ 图像到图像生成——Comfyui的基本使用(三)

参考&#xff1a;ComfyUI的安装与使用&#xff08;一&#xff09;&#xff08;windows1660ti 6G显存&#xff09; 草稿img2img 工作流展示&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Nv68-e4glh6lD7N9KB_-Pg?pwd0614 a tiger with anger emotion ,best qualit…

每日一题——冒泡排序

C语言——冒泡排序 冒泡排序练习 前言&#xff1a;CSDN的小伙伴们&#xff0c;大家好&#xff01;今天我来给大家分享一种解题思想——冒泡排序。 冒泡排序 冒泡法的核心思想&#xff1a;两两相邻的元素进行比较 2.冒泡排序的算法描述如下。 (1)比较相邻的元素。如果第一 个比…

图书馆图书可视化分析+大屏

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 目录 摘要前言技术栈开发环境数据说明 正文数据获取数据存储数据清理数据分析数据挖掘关联规则二分类预测 数据可视化书籍价格区间柱状图书籍评…

MySQL面试重点-1

1. 数据库基础知识&#xff1a; DDL、DML、DQL、DCL的概念与区别&#xff1f; DDL&#xff08;数据定义语言&#xff09;&#xff1a;创建&#xff08;CREATE&#xff09;数据库中的各种对象&#xff1a;表、视图、索引等DML&#xff08;数据操纵语言&#xff09;&#xff1a…

教学资源共享平台的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;老师管理&#xff0c;用户管理&#xff0c;成绩管理&#xff0c;教学资源管理&#xff0c;作业管理 老师账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用…

基于SSM+Jsp的旅游景点线路网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

【QT5】<总结> QT主要技术点

文章目录 前言 一、QT串口编程 二、QT网络编程 三、QT多线程 四、开发板上运行QT程序 前言 在学习QT的过程中&#xff0c;旨在更好地巩固所学到的知识&#xff0c;本篇总结QT在嵌入式开发中的主要技术点。 一、QT串口编程 思维导图&#xff1a; 知识点&#xff1a;【QT5…

【仿真建模-anylogic】FlowchartBlock原理解析

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-17 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 类图 2. 原理解析 2.1 核心函数 函数功能FlowchartBlock(Engine engine ,Agent owner, AgentList population )构造函数&#xff…

在表格中渲染轮播图的方法;

效果图&#xff1a;代码&#xff1a; shop()function shop() {// render()$.ajax({url: "http://jingxun.zhbbll.asia/pc/Commodity/shop_list", //要请求的后端地址type: "GET", //数据发送的方式(POST或者GET)dataType: JSON,headers: {token: token,id…

Mybatis工作流程和插件开发

在了解插件开发之前&#xff0c;我们先总体的来梳理一下Mybatis的大致执行流程&#xff1a; 1.new SqlSessionFactoryBuilder().build(inputStream):先根据配置文件&#xff08;包含了全局配置文件和映射配置文件&#xff09;初始化一个对象Configuration&#xff08;这里对象里…

一二三应用开发平台应用开发示例(3)——生成库表及后端代码

生成库表 前端页面的配置&#xff0c;也就是视图功能&#xff0c;我们先放一放&#xff0c;来看看生成库表和后端代码。 关闭实体配置界面&#xff0c;回到实体列表&#xff0c;勾选“文件夹”实体&#xff0c;点击“生成库表”&#xff0c;并确定。 系统提示成功后&#xff…

机器学习-课程整理及初步介绍

简介: 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从经验中学习并改进其在特定任务上的表现&#xff0c;而无需进行明确的编程。机器学习涉及多种算法和统计模型&#xff0c;它们可以从数据中学习规律&#xff0c;并做出预测或决策。机器学习的应用非常广泛&…

云计算在保险行业的应用:太平财险团财险理赔新核心业务系统案例

随着科技的快速发展&#xff0c;云计算技术已经成为推动保险行业数字化转型的重要力量。云计算为保险公司提供了弹性、可扩展的计算资源&#xff0c;使其能够灵活应对业务高峰和低谷&#xff0c;提高业务运营效率和风控水平。太平财险与太平金科联合开发的“团财险理赔新核心业…

购物车列表设计

三、缓存结构设计 购物车数量 数据结构 string redisKey : cart_size${userId} value:购物车数量 缓存时间 15天 数据库用户购物车列表 数据结构 string redisKey : cart${userId} value:数据库用户购物车列表json 缓存时间 15天 用户排序后购物车商品列表&#xff…

Android sensor列表和访问记录

命令: dumpsys sensorservice 1.dumpsys sensorservice查看最近申请记录 dumpsys sensorservice命令输出Previous Registrations. Previous Registrations: 23:07:43 0x00000008 pid16587 uid10397 packagecom.start.testdemo.ui.udfp.fql.XsqFQLActivity samplingPeriod66…