【阿一网络安全】如何让你的密码更安全?(三) - 散列函数

news2024/11/9 3:41:39

散列函数

散列函数(Hash Function,又称散列算法、哈希函数),是一种从任何一种数据中创建小的数字指纹的方法。

散列值

散列函数,把任意长的消息明文,压缩成摘要,使得数据量变小,将数据的长度固定下来,这种输出的值,称为散列值或者哈希值(Hash Value)。

散列值,通常用一个短的随机字母和数字组成的字符串。

基本特性

不可逆性

这是散列函数的关键特点,从散列值无法从理论上还原出原始值,确保了数据安全。

抗碰撞性

一个好的散列算法,应该抵抗散列碰撞。

理论上,如果两个原始值是不相同的,那么他们的散列值也不相同。

但是也有概率会出现原始值不同散列值相同的情况,尤其是当输出长度有限时。

应用

数据加密

正因为散列函数拥有抗碰撞性和不可逆性,所以大多数的数据加密,可以使用散列算法。

数据完整性

通常把原数据和散列值一起发送,接收方接收到数据后,把原数据散列计算后得到的散列值和接收到的散列值比较,如果一致则证明该数据未被篡改。

散列表

散列表(Hash Table)是散列函数的一个主要应用,是一种非常高效的数据结构,主要用于存储和检索数据。

散列表通过将键(Key)映射到值(Value)来存储数据,每个键都通过特定的散列算法转为一个唯一的索引(Hash Code),然后每次查找指定的索引从而找到想要的值。

常用算法

MD5

MD5消息摘要算法(MD5 Message-Digest Algorithm),是一种广泛使用的密码散列函数,可以生成一个128位的散列值。

由MD2、MD3、MD4改进而来,主要增强算法复杂度和不可逆性。

但在1996年被证实存在弱点,可以被破解。

2004年被证实无法防止碰撞攻击,因此不适用于安全性,主要被用于SSL公开密钥认证或者数字签名等用途。

算法

MD5 是输入不定长数据,输出固定128位的算法。

一个MD5运算,由类似的64次循环构成,分成4组16次。

  • F:一个非线性函数;一个函数运算一次;
  • Mi:表示一个 32-bits 的输入数据;
  • Ki:表示一个 32-bits 常数,用来完成每次不同的计算。
应用场景
  • 文件校验,常用于文件下载时,生成文件的MD5值,与源文件的MD5值做比较,验证文件是否完整。
  • 消息摘要,由于计算速度较快,可以快速生成信息摘要的场景下使用。
示例

一般128位的MD5散列被表示为32位十六进制数字

import hashlib

text = "你好,阿一"
md5 = hashlib.md5()
md5.update(text.encode('utf-8'))
md5.hexdigest()

# 362ccc2f2b1c6635d743a08990e5f908

SHA-1

SHA-1(Secure Hash Algorithm 1,安全散列算法 1),是一种密码散列函数。

SHA-1可以生成一个被称为消息摘要的160位散列值,散列值通常的呈现形式为40个十六进制数。

2005年,密码分析人员发现了对SHA-1的有效攻击方法,表明该算法可能不够安全。2017年2月23日,CWI Amsterdam与Google宣布了一个成功的SHA-1碰撞攻击,发布了两份内容不同但SHA-1散列值相同的PDF文件作为概念证明。

应用场景
  • 文件校验,校验文件是否完整,也可以校验文件的SHA-1值。
  • 数字证书,曾经被作为SSL/TLS协议的签名算法。
示例
sha1 = hashlib.sha1()
sha1.update(text.encode('utf-8'))
sha1.hexdigest()

# 8e4a4706faba4f29685c28d062e99dc40a25d915

SHA-2

SHA-2(Secure Hash Algorithm 2,安全散列算法 2),2001年发布,是SHA-1的后继者,分为几个不同的算法标准,SHA-224,SHA-256,SHA-384,SHA-512,SHA-512/224,SHA-512/256。

最常用的是 SHA256,生成256位的散列值,64个十六进制表示。

算法

SHA-2的第t个加密循环。图中的深蓝色方块是事先定义好的非线性函数。

  • ABCDEFGH一开始分别是八个初始值,Kt是第t个密钥,Wt是本区块产生第t个word。
  • 原消息被切成固定长度的区块,对每一个区块,产生n个word(n视算法而定),透过重复运作循环n次对ABCDEFGH这八个工作区段循环加密。
  • 最后一次循环所产生的八段字符串合起来即是此区块对应到的散列字符串。
  • 若原消息包含数个区块,则最后还要将这些区块产生的散列字符串加以混合才能产生最后的散列字符串。
应用场景
  • 文件校验,校验文件是否完整,也可以校验文件的SHA-256值。
  • 数字证书,在数字证书和数字签名的生成过程中,SHA-256被广泛使用,提供较高的安全性和抵抗碰撞攻击的能力。
  • 密码保护,需要应用程序都是用SHA-256对密码进行散列计算存储,以提高密码安全。
示例

sha256 = hashlib.sha256()
sha256.update(text.encode('utf-8'))
sha256.hexdigest()

# 4ce5cf90c0f604dfc94bfc80af7aaecd2247aae43ecacf5642ef321b7775f239

SM3

SM3是我国国家密码管理局发布的一种密码散列函数算法,属于国家商用密码,算法公开。

主要用于数据签名及验证、消息认证码生成及验证、随机数生成等,安全性及效率与SHA-256相当。

生成长度位为256位的散列值。

特点
  • 性能高效,计算速度非常高效,适合大规模数据处理。
  • 安全性,当前没有有效的攻击手段可以破坏SM3的安全性,其抗抵赖性和抗伪造能力都符合现代加密需求。
应用场景
  • 政府,信创环境
  • 国内的金融系统中的数据保护和数据完整性
  • 电子签名
  • 与SM2配套使用,用于SM2中数字签名的随机数生成
示例
from sm3utils import sm3
sm3 = sm3()
sm3.update(text.encode('utf-8'))
sm3.hexdigest()

# 432d42b3fa85c117eaca85a0d7a8c6aceba7a52a66a101d624be0f456d0e604b

总结

本文主要简单介绍了密码散列函数算法 MD5、SHA-1、SHA-2、和 SM3 的基本原理,以及它们的实现过程。对比另外两类算法,散列函数算法最大优势就是验证完整性、散列表和数字签名。

三篇文章,对各种加密算法和应用场景进行了全面的介绍。密码学是一门深奥的学科,而作为密码学的使用者,只需要正确地理解各类算法的特性和功能,就可以满足日常的应用需求了。

总的来说,在使用的时候,要记住下面这些内容:

  • 对称加密具备较高的安全性和性能,要优先考虑;
  • 在一对多的场景中(如多人登录服务器),存在密钥分发难题的时候,我们要使用非对称加密;
  • 不需要可逆计算的时候(如存储密码),我们就使用散列函数算法。

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

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

相关文章

[数据集][目标检测]脊椎检测数据集VOC+YOLO格式1137张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1137 标注数量(xml文件个数):1137 标注数量(txt文件个数):1137 标注…

SpringBoot2:web开发常用功能实现及原理解析-上传与下载

文章目录 一、上传文件1、前端上传文件给Java接口2、Java接口上传文件给Java接口 二、下载文件1、前端从Java接口下载文件2、Java接口调用Java接口下载文件 一、上传文件 1、前端上传文件给Java接口 Controller接口 此接口支持上传单个文件和多个文件,并保存在本地…

基于小程序的教学辅助微信小程序设计+ssm(lw+演示+源码+运行)

教学辅助微信小程序 摘 要 随着移动应用技术的发展,越来越多的学生借助于移动手机、电脑完成生活中的事务,许多的传统行业也更加重视与互联网的结合,由于学生学习的压力越来越大,教学辅助是一个非常不错的教育平台,对…

人工智能(AI)领域各方向顶会和顶刊

在人工智能(AI)这个快速发展的领域,研究人员和从业者需要紧跟最新的研究动态和技术进展。顶级的会议和期刊是获取最新科研成果和交流思想的重要平台。以下是人工智能领域内不同方向的顶级会议和期刊概览。 顶级会议 人工智能基础与综合 A…

客厅无主灯设计:灯位布局与灯光灯具的和谐搭配

在现代家居设计中,客厅作为家庭活动的中心区域,其照明设计的重要性不言而喻。无主灯设计以其灵活多变、氛围营造独特的优势,逐渐成为客厅照明的热门选择。然而,如何合理规划灯位布局,并科学搭配灯光与灯具,…

20240913 每日AI必读资讯

AMD死战CUDA:我是一家软件公司 - AMD重大改变:重心将从硬件开发转向强调软件开发、API 和 AI 体验。 - 软件工程团队规模扩大了三倍,并且全力以赴投入软件开发 - AMD将自家已有5年历史的图形架构RDNA、计算架构CDNA重新整合在一起&#xf…

计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

2024年9月13日 十二生肖 今日运势

小运播报:2024年9月13日,星期五,农历八月十一 (甲辰年癸酉月庚辰日),法定工作日。 红榜生肖:猴、鼠、鸡 需要注意:牛、兔、狗 喜神方位:西北方 财神方位:…

windows10通过coursier安装scala

第一步:安装Java 参考菜鸟教程安装Java: https://www.runoob.com/java/java-environment-setup.html#win-install 第二步:安装coursier 进入https://www.scala-lang.org/download/ 如下图所示: 第三步、确定jdk对应的scala版本…

小琳AI课堂:MASS模型——革新自然语言处理的预训练技术

大家好,这里是小琳AI课堂。今天我们来聊聊一个在自然语言处理(NLP)领域非常热门的话题——MASS模型,全称是Masked Sequence to Sequence Pre-training for Language Generation。这是华为诺亚方舟实验室在2019年提出的一种创新模型…

cpp-httplib的下载和使用

cpp-httplib的下载和使用 1.httplib 简介2. httplib 使用2.1 协议接口2.2 双端接口2.3 实际使用 3. 对Server中的Handler回调函数进行分析4. 最后 1.httplib 简介 cpp-httplib(也称为 httplib)是一个基于 C 的轻量级 HTTP 框架,它提供了简单…

统一建模语言UML之类图(Class Diagram)(表示|关系|举例)

文章目录 1.UML2.Class Diagram2.1 类图的表示2.2 类间的关系2.2.1 关联2.2.2 聚合2.2.3 组合2.2.4 泛化(继承)2.2.5 实现(接口实现)2.2.6 依赖 2.3 类图的作用 参考:Class Diagram | Unified Modeling Language (UML)…

2024/9/12 数学“回头看”之R(a)与R(a※)、分布函数、概率密度的特点

注意!这是充分必要条件。 分布函数性质 概率密度性质:

如何使用Jmeter关联influxDB?

一、添加"添加后端监听器" 二、后端监听器实现选择,"org. apache. jmeter. visualizers. backend. influxdb.InfluxdbBackendlistenerClient" 三、修改"influxdbUrl:自己的主机、application:取一个项目名" 四、influxDB&…

SAP B1 学习笔记 - 易混淆字段名(持续更新中)

背景 在 SAP B1 的单据中,由于同一单据时常对应着多个后台表单,且后台表单内包含的字段信息往往远大于单据显示出来的,在配置时经常出现多个字段混淆、无系统信息提示字段名模糊的情况,这里总结常见的易混淆难查找的后台字段名。…

【MySQL】MySQL表的增删改查(进阶篇)——之查询操作(超级详解)

前言: 🌟🌟本期讲解关于MySQL表增删查改进阶篇,希望能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/8SiWF 🌈感兴趣的小伙伴看一看小编主页:http://t.csdnimg.cn/8SiWF ​…

SpringBoot父子工程搭建

SpringBoot父子工程搭建 1、父工程 1.1、创建父工程 1.2、移除无用文件 1.3、修改pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XML…

循环节,CF 314B - Sereja and Periods

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 314B - Sereja and Periods 二、解题报告 1、思路分析 如果 b 个 a 中出…

【Python报错已解决】AttributeError: ‘str‘ object has no attribute ‘read‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;直接使用字符串2.2 步骤…

DWI扩散磁共振成像和结构连接组学指南

扩散磁共振成像和结构连接组学指南 引言流程概述扩散磁共振成像(dMRI)dMRI基础ADC&#xff08; apparent diffusion coefficient, 表观扩散系数&#xff09;MD&#xff08;mean diffusivity, 平均扩散率&#xff09;FA&#xff08; fractional anisotropy, 分数各向异性&#x…