SHA-512 是 SHA-2(Secure Hash Algorithm 2)系列密码散列函数的重要成员,由美国国家安全局(NSA)设计,2001 年被纳入 NIST(美国国家标准与技术研究院)的 FIPS 180 标准,后经 FIPS 180-2、FIPS 180-3、FIPS 180-4 多次更新,成为目前广泛应用的哈希算法之一。

1 算法基本特性

SHA-512 的核心参数决定了其运算规模和安全等级,具体如下:

参数

数值 / 说明

输出哈希值长度

512 位(64 字节),固定长度输出

消息块大小

1024 位(128 字节),分块处理的基本单位

字长

64 位,所有运算基于 64 位寄存器执行

运算轮数

80 轮,每轮使用不同的函数和常量

抗碰撞安全强度

256 位(理论上找到碰撞需 2²⁵⁶次运算)

消息扩展后字数量

80 个(从 16 个原始消息字扩展而来)

2 核心设计原理

SHA-512 基于Merkle-Damgård 结构,这是一种迭代型哈希函数设计框架,核心思想是:将任意长度的输入消息转换为固定长度的哈希值,过程分为 “消息预处理→分块迭代压缩→最终哈希值生成” 三部分,通过 “压缩函数” 对每块消息进行处理,并更新哈希状态。

3 详细流程

3.1 消息预处理(填充)

为了让输入消息长度满足分块要求(1024 位的整数倍),需对原始消息进行填充,步骤如下:

第一步:补 “1”
在原始消息末尾添加一个二进制位 “1”(即 0x80)。

第二步:补 “0”
继续添加 k 个二进制位 “0”,使得填充后消息的长度满足:
(原始消息长度 + 1 + k) mod 1024 = 896(即剩余空间恰好为 128 位,用于存储原始消息的长度)。

第三步:补长度信息
在末尾添加 128 位的 “原始消息位长度”(大端序表示)。例如,若原始消息长度为 n 位,则添加 n 的 128 位二进制表示。

示例:若原始消息长度为 1000 位,则:
1000 + 1 + k ≡ 896 mod 1024 → k = 896 - 1001 mod 1024 = 919 位(补 919 个 0),最后补 128 位长度信息,总长度为 1000+1+919+128=2048 位(2 个 1024 位块)。

3.2 初始化哈希值(初始向量)

SHA-512 的初始哈希值由 8 个 64 位常量组成,这些常量来自前 8 个质数(2、3、5、7、11、13、17、19)的立方根小数部分的前 64 位,具体值如下:

变量

十六进制值(64 位)

变量

十六进制值(64 位)

H₀

0x6a09e667f3bcc908

H₄

0x510e527fade682d1

H₁

0xbb67ae8584caa73b

H₅

0x9b05688c2b3e6c1f

H₂

0x3c6ef372fe94f82b

H₆

0x1f83d9abfb41bd6b

H₃

0xa54ff53a5f1d36f1

H₇

0x5be0cd19137e2179

这些值将作为压缩运算的初始状态,每处理一个 1024 位块后更新。

3.3 消息扩展(生成 80 个消息字)

每个 1024 位的消息块会被拆分为 16 个 64 位字(记为 W₀~W₁₅),再通过扩展算法生成剩余 64 个字(W₁₆~W₇₉),公式如下:

Wt=σ1(Wt−2​)+Wt−7​+σ0(Wt−15​)+Wt−16​

其中:

σ0(x)=ROTR1(x)⊕ROTR8(x)⊕SHR7(x)
(ROTR 为循环右移,SHR 为逻辑右移)

σ1(x)=ROTR19(x)⊕ROTR61(x)⊕SHR6(x)

所有运算为 64 位无符号整数加法(模 2⁶⁴)。

3.4 压缩函数(80 轮迭代运算)

对每个消息块,压缩函数会基于扩展后的 80 个消息字(W₀~W₇₉)进行 80 轮运算,更新哈希状态。过程如下:

(1)初始化轮变量

将当前哈希值(H₀~H₇)复制到 8 个临时变量中:
a = H₀, b = H₁, c = H₂, d = H₃, e = H₄, f = H₅, g = H₇, h = H₇。

(2)80 轮迭代(每轮更新变量)

每一轮 t(0≤t≤79)的运算公式为:

T1​=h+∑1(e)+Ch(e,f,g)+Kt​+Wt​
T2​=∑0(a)+Maj(a,b,c)
h=g
g=f
f=e
e=d+T1​
d=c
c=b
b=a
a=T1+T2​

其中:

Kₜ:80 个 64 位轮常量,来自前 80 个质数的平方根小数部分的前 64 位(固定值,可查表)。

核心函数:

Ch(x,y,z)=(x&y)⊕(¬x&z)(选择函数:若 x 为 1 则选 y,否则选 z)

Maj(x,y,z)=(x&y)⊕(x&z)⊕(y&z)(多数函数:返回 x、y、z 中出现次数最多的值)

∑0(x)=ROTR28(x)⊕ROTR34(x)⊕ROTR39(x)

∑1(x)=ROTR14(x)⊕ROTR18(x)⊕ROTR41(x)

(3)更新哈希值

80 轮结束后,将临时变量与初始哈希值相加(模 2⁶⁴),得到新的哈希状态:

H0​=H0+a
H1​=H1+b
...
H7​=H7+h

3.5 生成最终哈希值

所有消息块处理完成后,将最终的 H₀~H₇按顺序拼接(大端序),得到 512 位的 SHA-512 哈希值。

4 算法特点

  1. 高安全性:512 位输出长度和 256 位抗碰撞强度,适用于高安全需求场景(如数字签名、区块链)。
  2. 雪崩效应:输入消息的微小变化(如 1 位翻转)会导致输出哈希值完全不同,确保数据完整性校验的可靠性。
  3. 不可逆性:从哈希值无法反推原始消息,适合存储密码(结合盐值使用)。
  4. 高效性:相比 SHA-1,运算复杂度更高,但现代硬件(如 CPU 指令集优化)可实现高效计算。

5 应用场景

  • 数字签名:如用于 PDF、软件包的签名验证,确保文件未被篡改。
  • 区块链:比特币等加密货币中用于生成区块哈希,保证链上数据不可篡改。
  • 数据校验:大型文件传输(如备份、分布式存储)的完整性校验。

密码存储:将用户密码通过 SHA-512(加盐)哈希后存储,避免明文泄露。

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

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

相关文章

通过python管理vcenter中的虚拟机

通过python管理vcenter中的虚拟机因业务需要,需在夜间关闭虚拟机,随通过计划任务远程管理开机、关机虚拟机一、通过docker配置python3.9环境 Dockerfile FROM python:3.9 RUN pip3 install pyvmomi7.0.0创建自定义镜像 docker build -t pyvmomi7:v1 .二…

AWS S3 生命周期管理最佳实践:IoT Core 日志的智能存储优化

在现代物联网应用中,设备日志数据的管理是一个重要挑战。随着设备数量的增长,日志数据量呈指数级增长,如何有效管理这些数据的存储成本成为关键问题。本文将分享如何为 AWS IoT Core 日志实施智能生命周期管理策略。 背景与挑战 IoT 设备产生的日志数据具有以下特点: 数据…

18.TaskExecutor获取ResourceManagerGateway

TaskExecutor获取ResourceManagerGatewayTaskExecutor 与 ResourceManager 之间的交互机制较为复杂,核心可以拆分为三个阶段: 首次发现与注册连接建立心跳维持 本文聚焦连接建立阶段,详细分析底层 RPC 连接的实现原理。回顾:start…

kafka查看消息的具体内容 kafka-dump-log.sh

目录kafka 消息查看1. 直接查看日志文件内容步骤:2. 使用 Kafka 工具查看日志主要参数说明常用命令:输出说明:3. 注意事项kafka 消息日志文件详解我们有时候遇到这样的需求,需要查看下kafka消息的内容。 kafka 消息查看 查看 Ka…

Spring Cloud OpenFeign 常用注解_笔记

Spring Cloud OpenFeign 提供了一种声明式、模板化的HTTP客户端,可以通过简单的接口描述远程调用,而不必手动编写低级的 HTTP 客户端代码。FeignClient用法参考:FeignClient用法-笔记-CSDN博客。这里梳理Spring Cloud OpenFeign 常用注解。 1…

移动端自动化Appium框架

文章目录环境搭建JAVAAndroid SDKGenymotion模拟器环境搭建 JAVA 1、安装JDK 从官网下载所需安装包,默认安装即可。 https://www.oracle.com/cn/java/technologies/downloads/ 2、配置环境变量 设置 - 编辑系统环境变量 - 环境变量。 系统变量下新建JAVA_HOME&a…

算法第26天|贪心算法:用最少数量的箭引爆气球、无重叠区间、划分字母区间

今日总结 用最少数量的箭引爆气球 题目链接:452. 用最少数量的箭引爆气球 - 力扣(LeetCode) 代码随想录 整体思路: 1、统一度量 : 将所有区间按照左端点进行排序: 用到了二维的sort,在类中需…

最新版的electron通信规则

介绍: 以前electron require(electron/remote).fs 就能调用node中的各种api,最新版可能为了安全考虑,除了主main.js入口文件以外,其他的地方都不能调用node中的api,比如里面的各种函数,如fs,path等。这节课来教大家最新版本的electron如何进行通信。 结构: 了解通信之前…

Python爬虫实战:研究PyPLN库相关技术

1. 引言 随着全球化的发展,葡萄牙语作为世界第六大语言,其在互联网上的文本数据量不断增长。如何从海量的葡萄牙语文本中提取有价值的信息,成为自然语言处理领域的重要研究方向。 PyPLN (Python Natural Language Processing Toolkit) 是一个专门针对葡萄牙语设计的自然语言…

层次分析法代码笔记

层次分析法 一、核心 在层次分析法中,通过 算术平均法、几何平均法、特征值法 计算指标权重,再通过 一致性检验 确保判断矩阵逻辑合理,为多准则决策提供量化依据。 二、代码 (一)一致性检验(判断矩阵合理性…

[精选] 2025最新生成 SSH 密钥和 SSL 证书的标准流程(Linux/macOS/Windows系统服务器通用方案)

[精选] 2025最新生成 SSH 密钥和 SSL 证书的标准流程(Linux/macOS/Windows系统服务器通用方案) 在现代网络中,SSH(安全外壳协议)和 SSL(安全套接层协议)是保证数据传输安全和身份验证的重要技术…

开发框架安全ThinkPHPLaravelSpringBootStruts2SpringCloud复现

PHP-ThinkphpLaravelThinkPHP是一套开源的、基于PHP的轻量级Web应用开发框架综合工具:武器库-Thinkphp专检(3-6版本)如何判断是TP6框架开发的web程序,基于源码、路径、图标、基于报错可发现dex.php?xxx 在其6.0.13版本及以前/?c…

uniapp+vue3小程序点击保存图片、保存二维码

介绍 步骤1:引入必要的API 在script部分,确保引入了uni的相关API,如uni.downloadFile和uni.saveImageToPhotosAlbum。 步骤2:下载图片到本地 在toInvite函数中,使用uni.downloadFile将图片下载到本地,并获取本地路径。 步骤3:处理权限和保存逻辑 在saveToAlbum函数…

Golang中GROM多表关联跟原生SQL多表关联区别

文章目录前言一、GROM多表关联二、原生Sql多表关联前言 对比GROM多表关联和原生Sql多表关联 一、GROM多表关联 适用于返回全部数据需要逻辑外键(不会在数据库创建任何约束)适合三个表以下的关联有几张表就会查询几次 type Product struct {gorm.Model …

设计模式六:工厂模式(Factory Pattern)

概念定义一个创建对象的接口&#xff0c;但让子类决定实例化哪个类。实现示例#include <iostream> #include <memory>// 产品基类 class Product { public:virtual void use() 0;virtual ~Product() default; };// 具体产品A class ConcreteProductA : public Pr…

应用层自定义协议【序列化+反序列化】

文章目录再谈 “协议”重新理解read、write、recv、send和tcp为什么支持全双工Server.cc网络版计算机实现Socket封装&#xff08;模板方法类&#xff09;socket.hpp定制协议JsonJson安装定义一个期望的报文格式Protocol.hppParser.hppCalculator.hpp完整的处理过程Client.cc三层…

dify创建OCR工作流

实现ocr识别文件内容&#xff0c;引用dify的一个插件&#xff0c;插件名称&#xff1a;mineru 引用在线版本mineru 具体操作说明&#xff0c;参见视频&#xff1a; 第六篇&#xff1a;DifyOCR&#xff0c;扫描件最优解_哔哩哔哩_bilibili 引用本地部署mineru 上面的这种使用…

备受关注的“Facebook Email Scraper”如何操作?

Facebook Email Scraper&#xff08;脸书邮箱提取工具&#xff09;是一类用于从Facebook平台提取公开邮箱信息的工具&#xff0c;其核心功能是通过解析用户主页、群组、页面等公开内容&#xff0c;识别并提取其中包含的邮箱地址&#xff0c;为用户提供结构化的联系方式数据。这…

【网络原理】万字长文解密UDP/TCP——手把手教你理解网络通信

目录 1.前言 2.正文 2.1UDP协议 2.1.1UDP协议端格式 2.1.2UDP的特点 2.1.3理解UDP的“不可靠” 2.1.4面向数据报 2.1.5基于UDP的应用层协议 2.2TCP协议 2.2.1TCP协议端格式 2.2.2TCP十个核心机制 2.2.2.1确认应答 2.2.2.2超时重传 确认应答超时重传 vs 三次握手 …

MATLAB软件使用频繁,企业如何做到“少买多用”?

在制造企业的工程计算、算法研发、系统建模等场景中&#xff0c;MATLAB 已成为不可或缺的核心工具。 无论是动力学建模、控制算法开发&#xff0c;还是信号处理和数据可视化&#xff0c;MATLAB 的高频使用场景覆盖了从研发部门到测试部门的多个岗位。然而&#xff0c;企业 IT 负…