SHA-512(安全雜湊演算法512位)



SHA-512,或安全雜湊演算法512,是一種雜湊技術,可將任意長度的文字轉換為固定大小的字串。每個輸出的SHA-512長度為512位(64位元組)。

此演算法常用於電子郵件地址雜湊、密碼雜湊和數字記錄驗證。SHA-512也用於區塊鏈技術,其中BitShares網路成為最著名的例子。

在本章中,我們將探討SHA-512的起源及其與該演算法應用的工作原理。

什麼是SHA-512?

SHA-512生成512位(64位元組)的雜湊值,使其成為SHA-2系列中最大的雜湊函式之一。SHA-512與所有加密雜湊演算法一樣,具有以下基本屬性:

  • 確定性 - 相同的輸入將始終獲得相同的結果。
  • 計算速度快 - 任何給定資料的雜湊值都可以很快計算出來。
  • 不可逆 - 您無法根據其雜湊值確定原始輸入。
  • 抗碰撞性 - 發現產生相同雜湊值的兩個不同輸入在計算上是具有挑戰性的。
  • 雪崩效應 - 輸入的微小變化(即使翻轉單個位)也會導致雜湊值發生顯著變化。

SHA-512的工作原理?

在不深入數學概念的情況下,SHA-512的工作原理如下:

  • 初始化 - 它以八個雜湊值開始,這些雜湊值是根據前八個素數的平方根計算出來的。
  • 預處理 - 對輸入訊息進行填充,使其成為塊大小的倍數。原始訊息的128位長度(填充前)新增到填充訊息的末尾。
  • 解析 - 然後將訊息分成1024位的塊。
  • 主迴圈 - 主迴圈在80輪中分析每個1024位的塊,透過邏輯運算、按位移位和模算術操作資料。
  • 輸出 - 處理完所有塊後,將生成的512位訊息摘要作為雜湊值輸出。

演算法

SHA-512演算法包括以下步驟:

  • 訊息填充 - 首先,對您的訊息進行填充,以確保其大小適合該演算法。這確保它可以分解成塊並進行處理。
  • 初始雜湊值 - 演算法以八個初始雜湊值開始。這些設定值作為雜湊過程的基礎。
  • 訊息處理 - 將填充的訊息分成塊。每個塊都經過一系列稱為輪次的階段。在每一輪中,使用特定技術混合和調整塊。
  • 最終雜湊值 - 檢查完所有塊後,計算雜湊值。此雜湊值作為原始訊息的唯一指紋。
  • 輸出 - SHA-512演算法生成最終雜湊結果,通常是十六進位制整數的字串。這是雜湊原始訊息後返回的值。
SHA-512 Algorithm

SHA-512的實現

現在,我們將使用不同的程式語言實現SHA-512演算法。

使用Python

正如我們在前面的章節中看到的SHA-1和SHA-256的實現一樣,我們將實現此演算法,但是我們用來生成新雜湊物件的函式略有不同。因此,我們將在本程式碼中使用hashlib.sha512()。

import hashlib

# generate a string to hash
my_string = "Hello, Tutorialspoint family!"

# chaneg the string to bytes 
my_bytes = my_string.encode('utf-8')

# generate a new SHA-512 hash object
hash_object = hashlib.sha512()

# Update the hash object
hash_object.update(my_bytes)

# get the hexadecimal representation
hash_hex = hash_object.hexdigest()

# print the SHA-512 hash
print("SHA-512 hash of", my_string, ":", hash_hex)

輸出

SHA-512 hash of Hello, Tutorialspoint family! : 7adcec675a2bae322d62c0266d148fbd9fcd65a8d9707c2e44f2ebc8138d4facf97b1079db71d9ff9e484fdcd1dd869b1c24086f3e58c6697e9db88074a2f831

使用Java

現在,我們將使用Java及其內建類MessageDigest和NoSuchAlgorithmException實現SHA-512。使用java的MessageDigest類,我們可以提供加密功能並使用'computeSHA512()'方法,該方法接受訊息作為輸入並計算其SHA-512雜湊值。如果找不到此類演算法,則使用NoSuchAlgorithmException類丟擲異常。因此,使用Java的SHA-512程式碼如下:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA512Example {
   // Function to compute SHA-512 hash
   public static String computeSHA512(String message) throws NoSuchAlgorithmException {
      // Create a MessageDigest object for SHA-512
      MessageDigest digest = MessageDigest.getInstance("SHA-512");

      // Update the digest with the message bytes
      byte[] hashedBytes = digest.digest(message.getBytes());

      // Convert hashed bytes to hexadecimal representation
      StringBuilder hexString = new StringBuilder();
      for (byte b : hashedBytes) {
         String hex = Integer.toHexString(0xff & b);
         if (hex.length() == 1) hexString.append('0');
         hexString.append(hex);
      }

      // Return the hexadecimal representation
      return hexString.toString();
   }

   public static void main(String[] args) {
      String message = "Namaste, Tutorialspoint Family!";
      try {
         String hashedMessage = computeSHA512(message);
         System.out.println("SHA-512 Hash of '" + message + "' is: " + hashedMessage);
      } catch (NoSuchAlgorithmException e) {
         e.printStackTrace();
      }
   }
}

輸入/輸出

SHA-512 Hash of 'Namaste, Tutorialspoint Family!' is: 140b8ea03714699c3738071bff5446587a8cf8ecfa092ed0f49115ee8ad9617055fcfc99a484e8e16987b9a7241a8314b1a85c8e49b7c8cb2de1e276cb2a3290

應用

SHA-512及其來自SHA-2系列的同類演算法通常用於許多安全應用程式和協議中,包括:

  • 數字簽名用於驗證訊息或文件的完整性。
  • 證書建立是由證書頒發機構 (CA) 用於確保數字證書安全性的過程。
  • 密碼雜湊是指將密碼以雜湊值而不是純文字的形式儲存在資料庫中。
  • 區塊鏈和加密貨幣:用於確保資料完整性和安全性。
廣告