Java常用工具算法-1--哈希算法(MD5,SHA家族,SHA-256,BLAKE2)

1、概述

哈希算法(Hash Algorithm),又稱散列算法,是一種將任意長度的輸入數據(明文)轉換為固定長度的輸出(哈希值/摘要)的數學算法。
哈希值通常被稱為摘要(Digest)。
其核心思想是通過單向函數將數據映射到一個較短的、固定長度的字符串,同時保證不同的輸入生成不同的哈希值(理想情況下)。

2、主要特點

(1)、單向性(不可逆)

  • 特性:無法從哈希值反推出原始輸入數據。
  • 用途:確保數據隱私(如密碼存儲)。
  • 示例:SHA-256(“Hello”)生成固定長度的哈希值,但無法通過哈希值還原出"Hello"。

(2)、固定輸出長度

  • 特性:無論輸入多長,輸出長度固定(如 SHA-256 的輸出為 256 位)。
  • 用途:便于存儲和傳輸。

(3)、確定性

  • 特性:相同的輸入始終生成相同的哈希值。
  • 用途:驗證數據完整性。

(4)、高效性

  • 計算哈希值的速度非常快。

(5)、抗碰撞性(Collision Resistance)

  • 特性:找到兩個不同輸入生成相同哈希值的難度極大(理論上不可能)。

(6)、雪崩效應(Avalanche Effect)

  • 特性:輸入微小變化(如一個比特)會導致哈希值劇烈變化。
  • 用途:確保數據篡改可檢測。

3、工作原理

(1)、基本流程

  1. 輸入處理:將任意長度的輸入數據(如文件、密碼)轉換為二進制格式。
  2. 填充與分塊:將輸入數據分割為固定大小的塊(如 SHA-256 分塊為 512 位)。
  3. 初始化變量:設置初始哈希值(如 SHA-256 使用前 8 個素數的平方根)。
  4. 主循環處理:對每個數據塊進行復雜的數學運算(如混淆、擴散操作)。
  5. 輸出哈希值:最終生成固定長度的哈希值。

(2)、沖突與解決

  • 沖突(Collision):不同輸入生成相同的哈希值。
  • 解決方法:
    • 加鹽(Salting):在輸入中添加隨機值(鹽),防止彩虹表攻擊(如密碼存儲)。
    • 虛擬節點:在分布式系統中,通過虛擬節點減少哈希沖突(如一致性哈希)。

4、應用場景

(1)、數據完整性校驗

  • 用途:驗證文件或數據未被篡改。
  • 示例:
    • 下載軟件或文件時,可以通過比較官方提供的哈希值與本地計算得到的哈希值來確保文件未被篡改。
    • 數據庫備份完整性校驗。

(2)、密碼存儲

  • 用途:將密碼哈希后存儲,即使數據庫泄露,攻擊者也無法直接獲取明文密碼。
  • 最佳實踐:
    • 加鹽哈希:對每個密碼添加唯一鹽值(如bcrypt、PBKDF2)。
    • 慢哈希:使用計算密集型算法(如bcrypt)抵御暴力破解。
      解釋下加鹽處理流程:
      [1]、存儲密碼的步驟
  • 步驟1:生成鹽值
    使用加密安全的隨機數生成器(如 SecureRandom)為每個用戶生成唯一的鹽值。鹽值長度建議至少為 16 字節。
  • 步驟2:加鹽并哈希
    將鹽值與用戶輸入的密碼拼接,再通過安全哈希算法(如 BCrypt、Argon2、SHA-256)生成哈希值。
    示例公式:
    哈希值 = hash(密碼 + 鹽值)
  • 步驟3:存儲鹽值和哈希值
    將鹽值和哈希值一起存儲在數據庫中(鹽值可明文存儲,無需加密,密碼存儲為hash(原始密碼 + 鹽值)的摘要)。

[2]、校驗密碼的步驟

  • 步驟1:獲取鹽值和存儲的哈希值
    用戶登錄時,從數據庫中讀取該用戶的鹽值和哈希值。
  • 步驟2:重新哈希
    將用戶輸入的密碼與存儲的鹽值拼接,再次通過相同哈希算法生成新的哈希值。
  • 步驟3:比對哈希值
    將新生成的哈希值與數據庫中存儲的哈希值進行比較,若一致則驗證成功。

(3)、數字簽名

  • 用途:結合非對稱加密(如 RSA)生成簽名,確保數據來源和完整性。
  • 流程:(先hash在加密,先解密在重新hash)
    1. 發送方首先對消息進行哈希運算,然后使用自己的私鑰對哈希值進行加密形成簽名。
    2. 接收方收到消息后,先解密簽名獲得哈希值,并重新計算消息的哈希值進行比對,以此驗證消息的真實性和完整性。

(4)、唯一標識

  • 用途:生成數據的唯一指紋(如 Git 版本控制)。
  • 示例:區塊鏈中的每個區塊都包含前一個區塊的哈希值,形成了鏈式結構,保證了數據的不可篡改性。

(5)、分布式系統(一致性哈希)

  • 用途:在分布式存儲或緩存中,均勻分配數據到節點。
  • 特點:
    • 減少數據遷移:節點增減時僅影響附近節點的數據。
    • 虛擬節點:通過虛擬節點(如將物理節點映射為多個邏輯節點)平衡負載。

5、分類

1、MD5 (Message-Digest Algorithm 5) (不推薦)

  • 概述:MD5是最著名的哈希算法之一,由Ronald Rivest設計,用于生成128位(16字節)的哈希值。
  • 應用場景:
    • 文件完整性檢查
    • 密碼存儲(已不再推薦)
  • 安全性問題:
    • 易受碰撞攻擊影響,即可以輕易找到兩個不同的輸入產生相同的哈希值。
    • 不再被認為是安全的,特別是在密碼存儲和認證方面。

2、SHA家族 (Secure Hash Algorithm Family)

  • SHA-1:(不推薦)

    • 概述:生成160位(20字節)的哈希值。
    • 安全性問題:與MD5類似,存在理論上的碰撞攻擊,已被證明不夠安全。
  • SHA-2(包括SHA-256, SHA-384, SHA-512等):(當前主流SHA-256)

    • 概述:SHA-2是SHA-1的繼承者,提供了更高的安全性和更大的輸出空間(如SHA-256生成256位的哈希值)。
    • 應用場景:
      • 數字簽名
      • 安全通信協議(如TLS/SSL)
      • 區塊鏈技術(比特幣使用SHA-256)
    • 安全性:目前沒有有效的攻擊方法,被廣泛認為是安全的。
  • SHA-3:

    • 概述:作為SHA-2的后繼標準發布,但采用了完全不同的設計結構(海綿構造),以提供額外的安全保障。
    • 應用場景:適用于需要高安全性的場景,盡管SHA-2仍然被認為足夠安全。

3、BLAKE 和 BLAKE2

  • BLAKE:

    • 概述:一種基于HAIFA框架設計的哈希函數,最初是為了NIST SHA-3競賽而開發。
  • BLAKE2:

    • 概述:BLAKE2是BLAKE的一個改進版本,速度更快且更加靈活,安全性高,支持多種輸出長度(如BLAKE2b生成512位哈希值)。
    • 應用場景:
      • 高效的數據完整性校驗
      • 密碼派生函數(例如Argon2中使用BLAKE2b),密碼庫
      • 區塊鏈

4、其他哈希算法

  • RIPEMD系列:

    • 概述:另一種哈希算法家族,最初由歐洲RIPE項目開發。
    • 應用場景:較少見于主流應用,但在某些特定場合下使用。
  • CRC32:

    • 特點:簡單快速,但非加密安全。
    • 用途:數據校驗(如文件傳輸)。

常見算法對比:
在這里插入圖片描述

6、代碼示例

(1)、SHA-256 實現

import java.security.MessageDigest;public class SHA256Example {public static String sha256(String input) {try {MessageDigest digest = MessageDigest.getInstance("SHA-256");byte[] hash = digest.digest(input.getBytes());// 轉換為十六進制字符串StringBuilder hexString = new StringBuilder();for (byte b : hash) {String hex = String.format("%02x", b);hexString.append(hex);}return hexString.toString();} catch (Exception e) {throw new RuntimeException(e);}}
}

(2)、加鹽哈希(BCrypt)

import org.mindrot.jbcrypt.BCrypt;public class PasswordHashing {public static String hashPassword(String password) {// 生成鹽值并哈希密碼(工作因子 12 控制計算速度)return BCrypt.hashpw(password, BCrypt.gensalt(12));}public static boolean verifyPassword(String password, String hashed) {return BCrypt.checkpw(password, hashed);}
}

7、總結注意

(1)、哈希算法的核心價值

  • 數據完整性:通過哈希值驗證數據未被篡改。
  • 隱私保護:單向性確保密碼等敏感信息安全存儲。
  • 高效性:固定輸出長度便于快速比較和存儲。

(2)、選擇哈希算法的準則

  • 安全性優先:避免 MD5、SHA-1,選擇 SHA-256 或 SHA-3。
  • 性能權衡:BLAKE2 適合需要高性能的場景。
  • 場景適配:密碼存儲需加鹽,區塊鏈需抗碰撞。

(3)、典型應用案例

  • 區塊鏈:每個區塊的哈希值串聯形成不可篡改的鏈。
  • HTTPS:證書簽名使用哈希算法確保來源可信。
  • 分布式系統:一致性哈希優化節點數據分布。

逆風翻盤,Dare To Be!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74147.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74147.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74147.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenMCU(五):STM32F103時鐘樹初始化分析

概述 本文主要描述了STM32F103初始化過程系統時鐘的初始化,主要描述了系統時鐘的初始化,AHB總線時鐘,APB總線時鐘等的初始化。 硬件板卡3d圖 時鐘樹 STM32F103的時鐘樹,如下所示: 時鐘源選擇 從STM32F103的時鐘樹框圖,我們可以…

【qt】文件類(QFile)

很高興你能看到這篇文章,同時我的語雀文檔也更新了許多嵌入式系列的學習筆記希望能幫到你 : https://www.yuque.com/alive-m4b9n 目錄 QFile 主要功能QFile 操作步驟QFile 其他常用函數案例分析及實現功能一實現:打開文件并顯示功能二實現:另…

基于AT89C52單片機的輪胎壓力監測系統

點擊鏈接獲取Keil源碼與Project Backups仿真圖: https://download.csdn.net/download/qq_64505944/90545655?spm1001.2014.3001.5503 功能介紹: 采用MPX4115壓力傳感器進行輪胎壓力檢測;使用LCD液晶顯示器顯示輪胎壓力;若壓力過…

shell腳本--MySQL簡單調用

實現功能 增 數據庫的創建,數據表的創建已經實現 創建用戶 刪 刪除數據庫, 刪除庫下的某個表, 刪除某個用戶 改 暫無 查 查看所有的數據庫, 查看某個庫下的所有數據表, 查看某個表的結構, 查…

計算機網絡 OSI參考模型

目錄 OSS七層 OSI通信過程1 OSI通信過程2 應用層 表示層 會話層 傳輸層 網絡層 數據鏈路層 物理層 OSS七層 OSI通信過程1 OSI通信過程2 應用層 表示層 會話層 傳輸層 網絡層 數據鏈路層 物理層

2025年華為HCIP題庫分享

1101、 【拖拽題】OPSF鄰接關系建立的過程中需要使用不同的報文,那么請分別將以下各個狀態和該狀態使用的報文聯系起來。 答題格式為:11 22 33 43 正確答案:【12】【21】【24】【33】 解析: 建立鄰居關系 RouterA的一個連接到廣…

DIskgenius使用說明

文章目錄 一、概述1. 軟件簡介2. 系統要求 二、核心功能1. 分區管理(1) 查看磁盤分區(2) 創建與刪除分區(3) 調整分區大小(4) 格式化分區 2. 數據恢復(1) 恢復已刪除文件(2) 恢復丟失分區(3) 恢復誤格式化分區 3. 磁盤復制(1) 克隆磁盤(2) 磁盤鏡像 4. 文件操作(1) 文件復制與移…

linux--------------進程控制(上)

1.進程創建 1.1fork函數初識 在linux中fork函數是?常重要的函數&#xff0c;它從已存在進程中創建?個新進程。新進程為?進程&#xff0c;?原進 程為?進程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;?進程中返回0&#xff0c;?進程返回?進程id…

windows免密SSH連接 ubuntu教程

文章目錄 前情提要step1. 在windows下生成SSH密鑰step2. SSH公鑰copy到ubuntu的~/.ssh/authorized_keys內step3. 修改文件權限&#xff08;這一步完成后就可以實現免密SSH連接了&#xff09; 前情提要 ubuntu下安裝SSH服務 sudo apt-get install openssh-serverwindows下安裝…

中級:數組算法面試題全解析

一、引言 在Java面試中&#xff0c;數組相關的算法題是考察候選人基礎算法能力的常見類型。面試官通過這些問題了解候選人在面對具體問題時的邏輯思維和代碼實現能力。本文將深入剖析常見的數組算法面試題&#xff0c;結合實際開發場景&#xff0c;幫助讀者全面掌握這些知識點…

《Linux運維實戰:Ubuntu 22.04配置pam實現密碼復雜度策略》

總結&#xff1a;整理不易&#xff0c;如果對你有幫助&#xff0c;可否點贊關注一下&#xff1f; 更多詳細內容請參考&#xff1a;Linux運維實戰總結 一、背景信息 由于安全方面的考慮&#xff0c;先要求Ubuntu 22.04系統需配置密碼復雜度策略&#xff0c;先要求如下&#xff1…

JavaScript數據結構

目錄 JavaScript數據結構 一、基礎數據結構 1. 數組&#xff08;Array&#xff09; 2. 對象&#xff08;Object&#xff09; 二、ES6 高級數據結構 1. Map 2. Set 3. WeakMap 與 WeakSet 三、類型化數組&#xff08;Typed Arrays&#xff09; 四、其他數據結構實現 …

魔改chromium——基礎環境搭建

谷歌chromium環境要求詳細文檔 軟件和環境要求&#xff0c;必須安裝&#xff0c;硬性要求 系統環境&#xff1a;Windows 10&#xff0c;內存最小8GB&#xff0c;推薦16GB&#xff0c;NTFS格式磁盤最少100GB空間Git版本&#xff1a;安裝最新版本即可&#xff0c;Git桌面端下載…

電子文檔安全管理系統V6.0接口backup存在任意文件下載漏洞

免責聲明&#xff1a;本號提供的網絡安全信息僅供參考&#xff0c;不構成專業建議。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權&#xff0c;請及時與我聯系&#xff0c;我將盡快處理并刪除相關內容。 漏洞描述 電子文檔安全管理系統 V6.0 reso…

5.3 MVVM模型

一、MVVM的基本概念 MVVM的基本概念&#xff1a;Model、View、ViewModel 組件職責示例內容Model封裝業務數據User類&#xff0c;包含姓名、年齡屬性View負責UI呈現XAML界面&#xff0c;包含數據綁定ViewModel連接View和Model&#xff0c;處理視圖邏輯MainViewModel包含命令和…

python采集淘寶拍立淘按圖搜索API接口,json數據示例參考

以下是關于淘寶拍立淘按圖搜索API接口的詳細說明及JSON數據示例&#xff1a; 一、接口概述 淘寶拍立淘按圖搜索API接口是淘寶開放平臺提供的一項基于圖像識別技術的服務&#xff0c;允許開發者通過上傳商品圖片&#xff0c;獲取與圖片相似或相同的商品列表。該接口廣泛應用于…

每天學一個 Linux 命令(8):ls

大家好,歡迎來到《每天掌握一個Linux命令》系列。在這個系列中,我們將逐步學習并熟練掌握Linux命令,今天,我們要學習的命令是ls。 01 什么是ls命令 在Linux系統中,ls命令是“list”的縮寫,其英文全稱為“list directory contents”,即“列出目錄內容”。該命令非常實用…

00.【Linux系統編程】 Linux初識(云服務器設置CentOS并使用、Xshell鏈接云服務器)

目錄 一、華為云服務器免費體驗申請 二、Xshell遠程鏈接創建好的華為云服務器 2.1 下載Xshell 2.2 Xshell遠程連接華為云服務器 一、華為云服務器免費體驗申請 華為云官網 1. 進入華為云官網&#xff0c;最上面一欄點活動&#xff0c;并進入免費體驗中心。 2. 找到含有“…

arm非對齊訪問編譯器選項

gcc編譯選項&#xff1a; -munaligned-access gcc編譯選項&#xff1a; -mno-unaligned-access Enables (or disables) reading and writing of 16- and 32- bit values from addresses that are not 16- or 32- bit aligned. By default unaligned access is disabled for…

jmeter線程組高并發(詳細講解)

在 JMeter 中&#xff0c;線程組是測試計劃的核心組件&#xff0c;用于定義虛擬用戶&#xff08;線程&#xff09;的行為。線程組的屬性決定了測試的并發用戶數、加載速度、運行時間等。以下是線程組屬性的詳細講解&#xff1a; 1. 名稱&#xff08;Name&#xff09; 定義&…