【密码学】哈希函数与加密算法的关系

一、哈希函数的定义

        哈希函数(Hash Function),也被称为散列函数或杂凑函数, 是一种将任意长度的输入数据(通常称为“预映射”或“消息”)转换为固定长度输出(通常称为“哈希值”、“散列值”、“杂凑值”或“摘要”)的算法。
哈希函数的定义​​​​​​

【注】哈希值是固定长度的,哈希函数H是公开的。

        hash函数到底长什么样子?我们用一个简单的hash函数举例:

M是一个长消息,设M=(M_1,M_2,...,M_i,...,M_k),其中M_il长的比特串,定义哈希函数H如下

H(M) = M_1\oplus M_2\oplus...\oplus M_k

        解释一下这个简单的哈希函数,先把消息M分成k组,每组都是l长,那么哈希函数是进行异或运算的,得到的结果也必然是l长。这样无论多长的M消息,都能通过这个哈希函数生成固定长度的哈希值。

二、哈希函数的功能

(1)最重要的功能

数据完整性检验:哈希函数可以用于验证数据是否被修改。当数据被哈希后,如果数据的任何部分发生变化,重新计算的哈希值也会随之变化。因此,可以通过比较哈希值来判断数据的完整性。

数据完整性检验

         对上图做出解释:当一份数据首次被创建或接收时,会使用哈希函数计算出该数据的哈希值。这个哈希值就像是数据的一个指纹。计算出来的哈希值会被记录下来,通常与数据分开存储或传输,以防止篡改。当数据被再次使用或从远程位置下载时,接收者会重新计算数据的哈希值,并将其与之前记录的哈希值进行比较。

        如果两个哈希值匹配,这表明数据自第一次计算哈希值以来没有被篡改过,因此数据的完整性得到了验证。如果哈希值不匹配,则意味着数据可能已经被修改,或者在传输过程中发生了错误,这时数据的完整性被认为受到了破坏。

(2)其他功能

① 密码存储

        在用户身份验证系统中,用户的密码通常不是以明文形式存储,而是存储其哈希值。当用户登录时,系统对输入的密码进行哈希并与存储的哈希值进行比较,以验证用户的身份。

② 数字签名

        数字签名利用哈希函数将长消息压缩为较短的哈希值,然后使用私钥对该哈希值进行加密。这保证了消息的完整性和来源的真实性,因为只有拥有正确私钥的人才能生成有效的数字签名。

三、哈希函数满足条件及安全性定义

(1)哈希函数需要满足以下这些条件

  • hash函数的输入可以是任意长
  • hash函数的输出是固定长
任意长输入,得到固定长输出
  • 输入中的微小变化,也会导致哈希值显著改变(雪崩效益)
改变其中一个字,哈希值明显不同
  • 易于在软件和硬件实现
  • 相同的输入总是得到相同的输出(确定性)

(2)哈希函数需要满足的安全条件

  • 单向性:已知x,求H(x)较为容易;但是,已知h,求使得H(x)=hx在计算上是不可行的。
  • 抗弱碰撞性:已知x,找出y(y\neq x)使得H(y)=H(x)在计算上是不可行的。
  • 抗强碰撞性:找出任意两个不同的输入xy,使得H(y)=H(x)在计算上是不可行的。
三个安全性之间的关系

        从安全性的角度来说,单向性是最基础(最弱)的安全属性,抗强碰撞是最强的要求,它隐含了抗弱碰撞和单向性的安全性。换句话说,如果一个哈希函数是抗强碰撞的,那么它自然也是抗弱碰撞的和单向的。但是,反之则不一定成立;即,一个满足单向性和抗弱碰撞的哈希函数可能并不满足抗强碰撞性。

四、哈希函数与加密算法的关联

        哈希函数虽然经常与加密算法一起讨论,并且在很多安全相关的应用中发挥着关键作用,但哈希函数本身并不是一种加密算法。

特征加密算法哈希函数
可逆性双向的,数据可以通过加密算法加密,再通过解密算法恢复原始数据。单向的,从产生的哈希值几乎不可能反向计算出原始数据。
目的保护数据隐私,确保数据不会被未经授权的第三方读取。验证数据完整性和一致性,检测数据是否被篡改。
输出输出长度可变,依据加密模式和密钥长度。输出长度固定,不论输入数据长度如何。
安全性属性需要保证数据的机密性。需要满足抗碰撞性、预像抵抗性和二次预像抵抗性等安全属性。

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

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

相关文章

PHP红包拓客微信小程序系统源码

🎉红包狂欢,客源滚滚来!红包拓客微信小程序,营销新利器🚀 🧧一、创意红包,吸引眼球 你还在为如何吸引顾客而烦恼吗?红包拓客微信小程序来帮你!🎁 它以创意红…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(六)仿钉钉流程的转bpmn流程图

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、转bpmn流程图接口 /*** 转为bpmn xml格式* param processModel* throws IOException*/PostMapping("/ddtobpmnxml")public Result<?> ddToBpmnXml(RequestBody Proce…

TIA博途Wincc中画箭头和管道的具体方法示例

TIA博途Wincc中画箭头和管道的具体方法示例 如何画箭头? 如下图所示,在右侧的工具箱中找到基本对象—线,点击选中, 如下图所示,在画面中添加一条线段,然后右键进入该线段的属性,设置线的外观: 宽度、样式、颜色; 线端:这里可以选择起始和结束的样式,选择“箭头”,则…

自闭症孩子能否正常上普校:一场充满挑战与希望的探讨

在教育的舞台上&#xff0c;自闭症孩子​​​​​​​能否正常融入普通学校&#xff0c;是一个备受关注且充满争议的话题。 支持自闭症孩子上普校的观点认为&#xff0c;普通学校能为他们提供更接近真实社会的环境。在普校中&#xff0c;自闭症孩子有机会与不同类型的同学交流互…

IDEA实现热部署

什么是热部署&#xff1f; 热部署&#xff08;Hot Deployment&#xff09;是指在应用程序运行过程中&#xff0c;无需停止整个应用程序或重新启动服务器&#xff0c;就能够部署新的代码、资源或配置文件&#xff0c;使其立即生效。这种部署方式有助于提高开发效率和系统的可用性…

【系统架构设计】计算机组成与体系结构(三)

计算机组成与体系结构&#xff08;三&#xff09; 计算机系统组成存储器系统主存储器辅助存储器Cache存储器Cache 基本原理映射机制直接映射全相联映射组相联映射 替换算法写操作 流水线&#xff08;计算&#xff09;流水线周期流水线执行时间流水线的吞吐率流水线的加速比 计算…

卷积是如何计算的

使用代码&#xff0c;看卷积是如何计算的。 torch.nn torch.nn.functional srtide 的用法&#xff0c;代表卷积核的步幅 import torch import torch.nn.functional as F # 这个是输入的一个二维矩阵 input torch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],…

Javascript[ECMAScript] 新特性—1

背景 JS1.1&#xff08;1997&#xff09; 第一版基于Netscape Navigator 3.0中实现的JAVASCRIPT 1.1 JS1.2&#xff08;1999&#xff09; 基于Netscape Navigator 4.0中实现的JavaScript 1.2。添加了正则表达式、更好的字符串处理、新的控制语句、Try/Catch异常处理、更严格…

推荐3个提升工作效率的实用电脑工具

PearOCR PearOCR是一款基于网络的光学字符识别&#xff08;OCR&#xff09;工具&#xff0c;旨在通过先进的图像处理和机器学习技术&#xff0c;快速、准确地从图片中提取文字。该工具的所有功能完全免费&#xff0c;这主要得益于其所有文件都在本地进行识别&#xff0c;不需要…

完美解决:MySQL8报错:Public Key Retrieval is not allowed

在配置数据源的时候直接将属性allowPublicKeyRetrieval设置为true即可 &AutoReconnecttrue

使用getopt处理参数

文章目录 使用getopt处理参数1. shift 命令1.1 删除一个参数1.2 删除多个参数1.3 多次执行 shift 参数1.4 参数解析示例1.5 优化处理1.6 问题处理 2. getopt 命令2.1 常用参数及示例2.2 脚本参数优化示例2.3 参数校验 3. 示例展示4. eval 命令4.1 示例示例 1示例 2示例 3示例 4…

33 IRF配置思路

IRF配置思路网络括谱图 主 Ten-GigabitEthernet 1/0/49 Ten-GigabitEthernet 1/0/50 Ten-GigabitEthernet 1/0/51 备 Ten-GigabitEthernet 2/0/49 Ten-GigabitEthernet 2/0/50 Ten-GigabitEthernet 2/0/51 思路 主 1 利用console线进入设备的命令行页面去更改…

【C语言】C语言-身份证管理系统(源码+注释)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

关于.NETCORE站点程序部署到nginx上无法访问静态文件和无法正确生成文件的问题解决过程。

我的netcore6项目&#xff0c;部署到IIS的时候&#xff0c;生成报告时&#xff0c;需要获取公司LOGO图片放到PDF报告文件中&#xff0c;这时候访问静态图片没有问题。 然后还有生成邀请二维码图片&#xff0c;这时候动态创建图片路径和图片也没有问题&#xff0c;可以在站点的…

Python爬虫教程第4篇-使用BeautifulSoup解析html

文章目录 Beautiful Soup简介安装Beautiful Soup快速开始如何使用Beautiful Soup中的对象TagNameAttributes多值属性 NavigableStringBeautifulSoupComment 遍历文档树子节点tag名字.contents 和 .children.descendants.strings 和 stripped_strings 父节点.parent.parents 兄弟…

git批量删除本地包含某字符串的特定分支

git批量删除本地包含某字符串的特定分支 git branch -a | grep 分支中包含的字符串 | xargs git branch -D git删除本地分支_git查看删除本地分支-CSDN博客文章浏览阅读989次。git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删…

JavaScript(9)——作用域的一些问题

如果在函数内部&#xff0c;变量没有声明直接赋值&#xff0c;也会当做全局变量看。强烈不推荐&#xff01;&#xff01; function op() {num 80}op()console.log(num) 在不同作用域下&#xff0c;可能存在变量命名冲突的情况&#xff1a; let num 10 function fn(){let num…

Spring-Spring、IoC、DI、注解开发

1、Spring是什么 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 Spring整体架构 Spring优点&#xff1a; Spring属于低侵入设计。IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合&#xff0c;实现各个层之间的解耦&#xff0c;让我们更专注于业务…

5G中的RedCap

5G中的RedCap&#xff1a;降低能力的重要性和实现方式 随着5G技术的推广和普及&#xff0c;设备和终端的多样化使得网络能力的管理变得更加复杂和关键。RedCap&#xff08;Reduced Capability&#xff09;作为一个重要的概念&#xff0c;旨在解决设备能力差异对网络服务和用户…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十三章 Linux连接档

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…