密码技术 (3) - 单向散列函数

一. 前言

        当我们在网上下载一个软件包时,一般会附带一个hash文件,这个里面就保存了通过软件包计算的哈希值,官方名字叫散列值,用来让使用者确认软件包有没有被篡改的,而计算这个散列值就是由单向散列函数生成的。单向散列函数有一个输入和一个输出,输入成为消息,输出就成为散列值

二. 术语

1. 单向散列函数

        也被称为消息摘要函数(message digest function),哈希函数杂凑函数

2. 消息

        也被称为原像(pre-image)。

3. 散列值

        也称为消息摘要(message digest)或者指纹(fingerprint)。

三. 单向散列函数的性质

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

        单向散列函数可以处理任意长度的消息,无论消息多长,产生的散列值都是固定的。

2. 能够快速计算出散列值

        计算散列值应该随着消息长度的增加线性增加,而不能是指数增加。如果不能在可接受的计算时间内完成就没有意义。

3. 消息不同散列值不同

        哪怕是消息中的其中一个字节发生改变,也必须产生完全不同的散列值,这种不同的消息产生相同的散列值的情况称为碰撞。抗碰撞性是衡量一个单向散列函数安全的重要指标。

4. 具备单向性

        表示由散列值无法计算出消息的性质。就如同砸碎玻璃很简单,但是把玻璃碎片拼成玻璃很难是一个道理。

四. 单向散列函数的种类

1. MD4,MD5

        MD4和MD5分别是在1990和1991年设计出来的,都能够产生128比特(16字节)的散列值,由于这两个函数的强抗碰撞性都已经被攻破,已经不再安全,所以,现在已经不推荐使用了。

2. SHA-1,SHA-256,SHA-384,SHA-512

        SHA-1是由NIST设计的一种160比特(20字节)的散列值的单向散列函数。SHA-1已经在2005年被攻破,现在已经不推荐使用了。

        SHA-256,SHA-384和SHA-512统称为SHA-2。SHA-2包含六种版本,分别是SHA-224,SHA-256,SHA-512/224,SHA-512/256,SHA-384和SHA-512,它们都是SHA-256和SHA-512的变种。输出的散列值的长度分别为224(28字节),256(32字节),224(28字节),256(32字节),384(48字节)和512(64字节)比特。

3. SHA-3

        在2005年SHA-1被攻破的背景下,NIST开始着手研究SHA-3,也是和AES一样,通过公开竞选的方式进行标准化,SHA-3的选拔于2012年完成,由名为Keccak的算法胜出,成为SHA-3。

        NIST规定,参与竞选的算法必须和AES一样,能够让所有人自由免费的使用SHA-3算法。

注意:

        由于SHA-2还没有被攻破,所以SHA-2和SHA-3目前都是安全的。

五. openssl实践

        openssl通过dgst选项来进行单向散列函数操作的,通过openssl dgst -list可以列出当前openssl支持的单向单列函数,例如:

[root@ sha1]#openssl dgst -list
Supported digests:
-blake2b512                -blake2s256                -md4                      
-md5                       -md5-sha1                  -mdc2                     
-ripemd                    -ripemd160                 -rmd160                   
-sha1                      -sha224                    -sha256                   
-sha3-224                  -sha3-256                  -sha3-384                 
-sha3-512                  -sha384                    -sha512                   
-sha512-224                -sha512-256                -shake128                 
-shake256                  -sm3                       -ssl3-md5                 
-ssl3-sha1                 -whirlpool    
1. MD4,MD5

MD4:

infile内容:

hello, md4

openssl dgst -md4 infile

MD4(infile)= 4462e317a5ebbdb5f0d3774c1c45c103

从stdin获取内容:

echo -n "hello, md4" | openssl dgst -md4

(stdin)= 4462e317a5ebbdb5f0d3774c1c45c103

MD5:

从stdin获取内容:

echo -n "hello, md5" | openssl dgst -md5 
(stdin)= 33b3bc8e05b4fcc16bd531dd9adac166

        注意,MD4和MD5的散列值是16字节,以上都是以16进制显示的"33b3bc8e05b4fcc16bd531dd9adac166"其实是0x33 0xb3 0xbc 0x8e 0x05 0xb4 0xfc......0xac。

2. SHA-1

echo -n 'hello,sha1' | openssl dgst -sha1
(stdin)= 73eb2c728f810753c9537ab9b876c9c0305255f5

        同样,SHA-1的输出是20字节,上面是以16进制显示的。

3. SHA-2

SHA256:

echo -n "hello,sha2" | openssl dgst -sha256
(stdin)= 2124f3c215a468c4cef31fb974b7093baccad0180a415e34031f551372ff2d4c

SHA-384:

echo -n "hello,sha384" | openssl dgst -sha384
(stdin)= e15397fd702d3535b063ce4261a9bb6a6f8c6086b5d7af48a843c90bb25419c6df8206c8655cd3e1db20b4668c7c2433

SHA-512:

echo -n "hello,sha512" | openssl dgst -sha512
(stdin)= 30fc79c63ebe7cbd1d6d5d2b5e4759bb13415b5e5284973b9fd5bd26a8f5beea3d277d549234e1d4c13c7f5027240eb70c92f831c3c157f87274a2802d48e379

3. SHA-3

SHA3-256:

echo -n "hello,sha3-256" | openssl dgst -sha3-256
(stdin)= 125419436802bc6d47c8100b6fd130492a404d48a935299e367da1bbdfae22d6

        openssl除了支持sha3-256,还支持sha3-224,sha3-384和sha3-512。

六. 总结

        单向散列函数能够很容易的根据消息计算出散列值,但是却很难根据散列值计算出消息的内容,所以,单向散列函数通常用于确定一个消息是否被篡改。单向散列函数有MD4和MD5,由于它们已经被攻破,所以现在一般不建议使用了,SHA-1也于2005年被攻破,所以也不建议使用了,SHA-2和SHA-3由于目前还未被攻破,所以认为是安全的,可以使用。

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

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

相关文章

Linux C/C++下收集指定域名的子域名信息(类似dnsmap实现)

我们知道dnsmap是一个工具,主要用于收集指定域名的子域名信息。它对于渗透测试人员在基础结构安全评估的信息收集和枚举阶段非常有用,可以帮助他们发现目标公司的IP网络地址段、域名等信息。 dnsmap的操作原理 dnsmap(DNS Mapping&#xff…

Xmake v2.8.3 发布,改进 Wasm 并支持 Xmake 源码调试

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好&#x…

学信息系统项目管理师第4版系列14_沟通管理

1. 与IT项目成功有关的最重要的四个因素 1.1. 主管层的支持 1.2. 用户参与 1.3. 有经验的项目经理 1.4. 清晰的业务目标 1.5. 依赖于项目经理和团队具有良好的沟通能力 2. 沟通的主旨 2.1. 互动双方建立彼此相互了解的关系 2.2. 相互回应 2.3. 期待能经由沟通的行为与…

软件过程的介绍

软件过程概述 软件的诞生和生命周期是一个过程,我们总体上称这个过程为软件过程。软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的活动,每一项活动又可以分为一系列的工程任务。任何一个软件开发组织&a…

ESP32官方MPU6050组件介绍

前言 (1)因为我需要使用MPU6050的组件,但是又需要在这条I2C总线上挂载多个设备,所以我本人打算自己对官方的MPU6050的组件进行微调。建立一个I2C总线,设备依赖于这个总线挂载。 (2)既然要做移植…

【AI视野·今日Robot 机器人论文速览 第四十四期】Fri, 29 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 29 Sep 2023 Totally 38 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚NCF,基于Neural Contact Fields神经接触场的方法实现有效的外部接触估计和插入操作。 (from FAIR ) 操作插入处理结果&am…

凉鞋的 Godot 笔记 101. Hello Godot!

101. Hello Godot 学习任何一门技术,第一件事就是先完成 Hello World!的输出 所以我们也来先完成 Godot 的 Hello World。 我们所使用的 Godot 版本是 4.x 版本。 安装的过程就不给大家展示了,笔者更推荐初学者用 Steam 版本的 Godot&…

第一次作业题解

第一次作业题解 P5717 【深基3.习8】三角形分类 思路 考的是if()的使用,还要给三条边判断大小 判断优先级&#xff1a; 三角形&#xff1f;直角、钝角、锐角等腰等边 判断按题给顺序来 代码 #include <stdio.h> int main() {int a 0, b 0, c 0, x 0, y 0, z 0…

紫光同创FPGA图像视频采集系统,基于OV7725实现,提供工程源码和技术支持

目录 1、前言免责声明 2、设计思路框架视频源选择OV7725摄像头配置及采集动态彩条HDMA图像缓存输入输出视频HDMA缓冲FIFOHDMA控制模块HDMI输出 3、PDS工程详解4、上板调试验证并演示准备工作静态演示动态演示 5、福利&#xff1a;工程源码获取 紫光同创FPGA图像视频采集系统&am…

[每周一更]-(第64期):Dockerfile构造php定制化镜像

利用php官网镜像php:7.3-fpm&#xff0c;会存在部分插件缺失的情况&#xff0c;自行搭建可适用业务的镜像&#xff0c;才是真理 Dockerhub 上 PHP 官方基础镜像主要分为三个分支&#xff1a; cli: 没有开启 CGI 也就是说不能运行fpm。只可以运行命令行。fpm: 开启了CGI&#x…

Docker从认识到实践再到底层原理(九)|Docker Compose 容器编排

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

libtorch之tensor的使用

1. tensor的创建 tensor的创建有三种常用的形式&#xff0c;如下所示 ones创建一个指定维度&#xff0c;数据全为1的tensor. 例子中的维度是2维&#xff0c;5行3列。 torch::Tensor t torch::ones({5,3}); zeros创建一个指定维度&#xff0c;数据全为0的tensor&#xff0c;例子…

Java 基于 SpringBoot 的简历招聘系统

文章目录 1、效果演示2、 前言介绍3、主要技术4 **系统设计**4.1 系统体系结构4.2开发流程设计4.3 数据库设计原则 5 **系统详细设计**5.1管理员功能模块5.2用户功能模块5.3前台首页功能模块 6 源码咨询 1、效果演示 大家好&#xff0c;今天为大家带来的是基于 SpringBoot简历…

【AI视野·今日Robot 机器人论文速览 第四十一期】Tue, 26 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 26 Sep 2023 Totally 73 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Extreme Parkour with Legged Robots Authors Xuxin Cheng, Kexin Shi, Ananye Agarwal, Deepak Pathak人类可以通过以高度动态…

初识Java 11-2 函数式编程

目录 高阶函数 闭包 函数组合 柯里化和部分求值 本笔记参考自&#xff1a; 《On Java 中文版》 高阶函数 ||| 高阶函数的定义&#xff1a;一个能接受函数作为参数或能把函数当返回值的函数。 把函数当返回值的情况&#xff1a; import java.util.function.Function;inter…

操作EXCEL计算3万条数据的NDVI并填入

Python操作EXCEL&#xff0c;计算3万条数据的NDVI并填入 问题描述 现在是有构建好了的查找表&#xff0c;不过构建了3万条数据&#xff0c;在excel中手动计算每行的NDVI值太麻烦了&#xff0c;也不会操作。 就试试python吧&#xff0c;毕竟python自动处理大型EXCEL数据很方便…

Sentinel学习(1)——CAP理论,微服务中的雪崩问题,和Hystix的解决方案 Sentinel的相关概念 + 下载运行

前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍CAP理论&#xff0c;微…

UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,高效复制多个同样的资产】

目录​​​​​​​ 插件制作 添加新的类&#xff1a;AssetActionUtility 添加新的模块&#xff1a;EditorScriptingUtilities 路径了解 添加debug的头文件 代码【debug.h】内涵注释&#xff1a; 写函数 .h文件 .cpp文件 插件制作 首先第一步是做一个插件&#xff1a…

吉力宝:智能科技鞋品牌步力宝引领传统产业创新思维

在现代经济环境下&#xff0c;市场经济下产品的竞争非常的激烈&#xff0c;如果没有营销&#xff0c;产品很可能不被大众认可&#xff0c;酒香也怕巷子深&#xff0c;许多传统产业不得不面临前所未有的挑战。而为了冲出这个“巷子”&#xff0c;许多企业需要采用创新思维&#…

Java进阶必会JVM-深入浅出Java虚拟机

系列文章目录 送书第一期 《用户画像&#xff1a;平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 文章目录 系列文章目录前言一、推荐书籍二…