SHA512算法詳解

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 位(理論上找到碰撞需 22??次運算)

消息擴展后字數量

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 負…