【常见开源库的二次开发】基于openssl的加密与解密——单向散列函数(四)

目录:
目录:
一、什么是单项散列函数?
1.1 如何验证文件是否被修改过
1.2 单项散列函数:
二、单向hash抗碰撞
2.1 弱抗碰撞(Weak Collision Resistance)
2.2 强抗碰撞(Strong Collision Resistance)
2.3 安全性问题
2.4 当前推荐使用的哈希函数
三、单向hash应用场景
3.1 文件完整性(检查下载的软件是否被篡改):
3.2 口令加密:
3.3 消息认证(确保消息未被篡改):
3.4 伪随机数生成器(PRNG):
3.5 数字签名和非对称加密:
3.6 比特币的工作量证明(Proof of Work, PoW):
四、常用hash算法
4.1 MD5:
4.2 SHA1:
4.3 SHA2:
4.4 SHA-256:
4.5 SHA3:
一、什么是单项散列函数?
1.1 如何验证文件是否被修改过
当文件首次创建或被认为是处于可信状态时,这个已存储的文件在传输文件过程中由于安全性原因可能会中途被攻击者篡改信息,当我们拿到文件后如何知道信息是否被篡改保证信息的安全性呢?
这里我们首先将已存储的文件先做一个已存储文件副本,当我们已存储文件传输到我们这里时,我们想要知道信息是否完整,我们可以通过与之前的已存储文件副本进行比对,校验确认完整性。

已存储文件在形成已存储文件副本和传输文件时,我们可以认为这个过程的安全性都是相同的,都是有可能篡改的,而且在形成与校验过程中开销相对来说也是比较大的。
用指纹代替文件比对,将已存储文件形成一个指纹文件,指纹文件比较小,对于指纹文件的安全管理相对变得容易,而且开销也相对文件来说会小很对。
我们可以用一台可信服务器来放我们的安全属性,这样安全保存的成本更低,获取指纹的开销也比较小。
这里指纹需要满足的特点:计算开销小、存储空间开销小、已存储文件改变之后指纹文件跟着改变
1.2 单项散列函数:
根据指纹所需要满足的特点,解决这样的问题,我们就用到的单项散列函数
单项散列函数也称为哈希函数,是一种从输入数据(通常称为“消息”)生成固定大小输出(通常称为“哈希值”或“哈希码”)的算法。单向散列函数的关键特性之一是它们的单向性和抗碰撞性,这意味着从哈希值反推原始数据是非常困难的,并且找到两个不同的输入数据,使其产生相同的哈希值也非常困难。

(1)任意长度数据 => 固定长度散列:无论输入数据的大小或长度如何,哈希函数都会输出一个固定长度的哈希值。这使得哈希函数非常适用于处理大型数据集
(2)减少匹配开销:通过比较两个哈希值,而不是两个完整的数据集,可以大大减少匹配开销。这在比如文件完整性检查、数据库索引创建等场景中非常有用。
(3)快速计算:哈希函数通常设计得非常高效,可以快速计算出输入数据的哈希值。
(4)快速验证:由于哈希值的固定大小,验证哈希值比验证原始数据更快更简单。
(5)消息变化=>散列值变化:哈希函数的另一个关键特性是,即使输入数据的微小变化也会导致哈希值的大幅度变化。这就意味着,如果文件或消息被修改,哈希值也会改变,从而可以通过比较哈希值来检测修改。
(6)验证修改:通过对比文件或消息的原始哈希值和新的哈希值,可以验证它们是否被修改过。
(7)单向不可逆:从哈希值无法(或至少在计算上不可行)反推出原始输入数据,这是哈希函数的关键安全特性之一。
(8)抗碰撞:找到两个不同的输入,它们产生相同的哈希值是非常困难的。这称为哈希函数的抗碰撞性。这是哈希函数在众多用途,如密码学、数据完整性校验等方面的关键属性。
二、单向hash抗碰撞
2.1 弱抗碰撞(Weak Collision Resistance)
弱抗碰撞是指对于一个给定的输入 𝑥,很难找到另一个不同的输入 x′,使得 𝑥≠𝑥′ 且 ℎ(𝑥)=ℎ(𝑥′)。换句话说,给定一个特定的哈希值,很难找到另一个不同的输入,使得它们的哈希值相同。
2.2 强抗碰撞(Strong Collision Resistance)
强抗碰撞是指很难找到任意两个不同的输入 𝑥和 𝑥′,使得 𝑥≠𝑥′且 ℎ(𝑥)=ℎ(𝑥′)。换句话说,找到任何两个具有相同哈希值的不同输入是非常困难的。
2.3 安全性问题
-
MD5:MD5是一种广泛使用的哈希函数,但由于其设计上的缺陷,已经证明不再具有强抗碰撞性。这意味着可以找到两个不同的输入,它们具有相同的MD5哈希值。因此,MD5不再被推荐用于需要高安全性的应用,如数字签名。
-
SHA-1:SHA-1也是一种曾经广泛使用的哈希函数。然而,由于密码学分析的进展,SHA-1的强抗碰撞性也被攻破。虽然找到实际的碰撞需要大量的计算资源,但这已经表明SHA-1不再安全。因此,SHA-1也不再被推荐用于需要高安全性的应用。
2.4 当前推荐使用的哈希函数
为了确保安全性,推荐使用更现代的哈希函数,如SHA-256、SHA-3等。这些哈希函数目前被认为是安全的,具有良好的抗碰撞性。
三、单向hash应用场景
3.1 文件完整性(检查下载的软件是否被篡改):
通过比如 MD5, SHA1 或 SHA256 等散列算法来验证文件的完整性。下载文件时通常会提供一个哈希值,用户可以通过计算下载文件的哈希值并与提供的哈希值进行比较来确保文件未被篡改。
3.2 口令加密:
口令应通过哈希函数进行存储,而非明文。为增加安全性,常与加盐技术(salt)结合使用,这样即使两个相同的密码,由于加盐不同,其最终的哈希值也会不同。常用的哈希算法包括 bcrypt, PBKDF2 或 Argon2。
3.3 消息认证(确保消息未被篡改):
HMAC(Hash-based Message Authentication Code)是一种基于密钥的哈希算法,用于验证消息的完整性和真实性。它结合了哈希函数和一个密钥,只有知道密钥的人才能验证哈希值,从而确保消息的安全。
3.4 伪随机数生成器(PRNG):
在密码学中,高质量的伪随机数对于生成安全的密钥和密码非常重要。PRNG应具备高熵(随机性)以确保产生的数值不可预测。
3.5 数字签名和非对称加密:
通过使用非对称加密技术,可以生成数字签名来验证一个消息或文件的真实性和完整性。发送者使用私钥签名,接收者则可以用相应的公钥来验证签名。
3.6 比特币的工作量证明(Proof of Work, PoW):
这是一种共识机制,用于在没有中央权威的情况下达成网络共识。它要求参与者解决一个计算密集型的问题,解决问题的过程需要大量的计算资源,这样可以防止恶意攻击和垃圾交易。
四、常用hash算法
4.1 MD5:
MD5(Message-Digest Algorithm 5)已经不再被视为安全的哈希函数,因为它的碰撞抵抗性较弱,即存在两个不同的输入可能产生相同的输出的情况。然而,它仍然广泛用于非加密目的的数据完整性检查。
4.2 SHA1:
安全哈希算法1(SHA-1)比MD5更安全,但是同样因为碰撞抵抗性较弱而不再建议用于密码学哈希。
4.3 SHA2:
SHA-2是一组哈希函数,包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224和SHA-512/256等。SHA-256、SHA-384和SHA-512分别输出256位、384位和512位长的哈希值,被广泛应用在安全协议和系统中。
4.4 SHA-256:
SHA-256是应用最广泛的SHA-2函数,比特币的工作量证明(PoW)就是采用的SHA-256哈希函数。
4.5 SHA3:
SHA-3(Keccak)是SHA-2的后续版本,采用全新的设计。Keccak256(256位长的SHA-3版本)用于以太坊中生成地址和交易哈希。
4.6 国密SM3:
SM3是中国国家密码管理局推出的密码哈希函数标准,输出256位长的哈希值,主要应用在中国的安全系统和产品中。
尽管哈希函数的输出看起来是随机的,但它们都是确定性的:同一输入总是产生相同的输出。而安全的哈希函数还应具有以下性质:碰撞抵抗(难以找到两个不同输入产生相同输出)、预图像抵抗(给定哈希值难以找到对应的输入)和次预图像抵抗(给定输入难以找到另一输入产生相同的输出)。
相关文章:
【常见开源库的二次开发】基于openssl的加密与解密——单向散列函数(四)
目录: 目录: 一、什么是单项散列函数? 1.1 如何验证文件是否被修改过 1.2 单项散列函数: 二、单向hash抗碰撞 2.1 弱抗碰撞(Weak Collision Resistance) 2.2 强抗碰撞(Strong Collision Resista…...
获取不重复流水号(java)
一:概述 很多业务场景都需要获取不重复的业务流水号,当微服务项目或服务多节点部署时,获取流水号场景使用分布式锁性能低下,可以基于数据库行锁实现获取不重复流水号。 二:创建流水号数据库 CREATE TABLE serial (i…...
【python虚拟环境管理】【mac m3】 使用pipx安装poetry
文章目录 一. 安装 pipx二. 安装Poetry1. 安装2. advanced 操作 官网文档:https://python-poetry.org/docs/ pipx介绍文档:https://blog.51cto.com/u_15064632/2570626 一. 安装 pipx pipx 用于全局安装 Python 命令行应用程序,同时在虚拟环…...
git使用以及理解
git练习网站 Learn Git Branching git操作大全Oh Shit, Git!?! git commit git branch name git merge bugFix 合并俩个分支 git rebase main git checkout headgit switch head 会导致HEAD分离 ,就是指head->HEAD->c1 相对引用 ------------------- …...
openlayers 3d 地图 非三维 立体地图 行政区划裁剪 地图背景
这是实践效果 如果没有任何基础 就看这个专栏:http://t.csdnimg.cn/qB4w0 这个专栏里有从最简单的地图到复杂地图的示例 最终效果: 线上示例代码: 想要做这个效果 如果你的行政区划编辑点较多 可能会有卡顿感 如果出现卡顿感需要将边界点相应…...
GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南
0. 综合的教学视频介绍 GEO数据库挖掘分析作图全流程每晚11点在线教学直播录屏回放视频: https://www.bilibili.com/video/BV1rm42157CT/ GEO数据从下载到各种挖掘分析全流程详解: https://www.bilibili.com/video/BV1nm42157ii/ 一篇今年近期发表的转…...
我想我大抵是疯了,我喜欢上了写单元测试
前言 大家好我是聪。相信有不少的小伙伴喜欢写代码,但是对于单元测试这些反而觉得多此一举,想着我都在接口文档测过了!还要写什么单元测试!写不了一点!! 由于本人也是一个小小程序猿🙉…...
【Visual Studio】Visual Studio使用技巧及报错解决合集
目录 目录 一.概述 二.Visual Studio报错问题及解决方法 三.Visual Studio操作过程中遇到的问题及解决方法 四.Visual Studio编译优化选项 五.Visual Studio快捷键 一.概述 持续更新Visual Studio报错及解决方法,包括Visual Studio报错问题及解决方法、Visua…...
服务器数据恢复—raid5阵列热备盘同步失败导致lun不可用的数据恢复案例
服务器存储数据恢复环境: 华为S5300存储中有一组由16块FC硬盘组建的RAID5磁盘阵列(包含一块热备盘)。 服务器存储故障: 该存储中的RAID5阵列1块硬盘由于未知原因离线,热备盘上线并开始同步数据,数据同步到…...
算法题目整合
文章目录 121. 小红的区间翻转142. 两个字符串的最小 ASCII 删除总和143. 最长同值路径139.完美数140. 可爱串141. 好二叉树 121. 小红的区间翻转 小红拿到了两个长度为 n 的数组 a 和 b,她仅可以执行一次以下翻转操作:选择a数组中的一个区间[i, j]&…...
万界星空科技AI低代码平台:重塑数字化创新边界
在这个日新月异的数字化时代,技术的飞速发展正以前所未有的力量重塑着每一个行业。企业如何在瞬息万变的市场环境中保持竞争力,实现业务的快速迭代与创新? 重塑开发模式,加速数字化转型 传统软件开发周期长、成本高、门槛高&…...
iredmail服务器安装步骤详解!如何做配置?
iredmail服务器安全性设置指南?怎么升级邮件服务器? iredmail是一个功能强大的邮件服务器解决方案,它集成了多个开源软件,使您能够快速部署和管理邮件服务。AokSend将逐步引导您完成安装过程,无需深入的编程知识即可轻…...
【vue深入学习第1章】Vue.js 中的 Ajax 处理:vue-resource 库的深度解析
在现代前端开发中,Ajax 请求是与后端进行数据交互的关键技术。Vue.js 作为一个渐进式 JavaScript 框架,提供了多种方式来处理 Ajax 请求,其中 vue-resource 是一个较为常用的库。尽管 vue-resource 在 Vue 2.x 之后不再是官方推荐的 Ajax 处理…...
JDK新特性(Lambda表达式,Stream流)
Lambda表达式: Lambda 表达式背后的思想是函数式编程(Functional Programming)思想。在传统的面向对象编程中,程序主要由对象和对象之间的交互(方法调用)构成;而在函数式编程中,重点…...
【ARM】MDK-服务器与客户端不同网段内出现卡顿问题
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录不同网段之间的请求发送情况以及MDK网络版license文件内设置的影响。 2、 问题场景 客户使用很久的MDK网络版,在获取授权时都会出现4-7秒的卡顿,无法对keil进行任何操作,彻底…...
c++树(一)定义,遍历
目录 树的定义 树的基本术语 树的初始起点:我们定义为根 树的层次: 树的定义: 树的性质 性质1: 性质2: 树形结构存储的两种思路 树的遍历模板 树上信息统计方式1-自顶向下统计 树上信息统计方式2-自底向上统…...
YOLOv5和LPRNet的车牌识别系统
车牌识别系统 YOLOv5和LPRNet的车牌识别系统结合了深度学习技术的先进车牌识别解决方案。该系统整合了YOLOv5目标检测框架和LPRNet文本识别模型 1. YOLOv5目标检测框架 YOLO是一种先进的目标检测算法,以其实时性能和高精度闻名。YOLOv5是在前几代基础上进行优化的…...
内容安全(深度行为检测技术、IPS、AV、入侵检测方法)
1、深度行为检测技术 深度行为检测技术:是一种基于深度学习和机器学习的技术,它通过分析用户在网络中的行为模式,识别异常或潜在威胁行为,从而保护网络安全和内容安全 分类: 深度包检测技术(Deep Packet…...
MySQL双主双从实现方式
双主双从(MM-SS) 前言 避免单一主服务器宕机,集群写入能力缺失 从 1 复制 主1 ,从 2 复制 主 2 主 1 复制 主 2,主 2 复制主 1 也就是 主 1 和主 2 互为主从。主1主2互为主从, 是为了以下情景,…...
pico+unity手柄和摄像机控制初级设置
1、摄像头配置 摄像头模式、floor是追踪原点类型(将根据设备检测到地面的高度来计算追踪原点), Device 模式时,为通常理解的 Eye 模式,不会将根据设备检测到地面的高度来计算追踪原点 选择floor时,修改相…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
