HMAC-SHA256加密算法

一、什麼是HMAC-SHA256

HMAC-SHA256(Hash Message Authentication Code-Secure Hash Algorithm 256 bit)是一種加密算法,是SHA-256散列函數與一個密鑰結合的身份驗證方法。HMAC的安全性基於散列函數(SHA-256),而且可以通過密鑰的添加來增加信任度。此算法經常用於網絡領域中,例如 HTTPS、SSL、SSH 等加密通訊領域。

二、HMAC-SHA256算法的工作原理

在進行HMAC-SHA256算法運算時,需要傳遞兩個參數key和data,其中key是一個密鑰,data是需要進行散列的數據。算法流程如下:

  1. 通過密鑰key經過一個特定的方法,將key轉換成一個value。

  2. 通過異或運算符(XOR)以填充value。如果key太長,即大於block_size位,需要通過SHA-256散列函數將key壓縮到block_size位。

  3. 將填充後的value和data傳遞給SHA-256哈希函數,得到一個256位的哈希值。

  4. 將哈希值作為結果返回。

這樣,我們就得到了一個充分利用密鑰安全性的、結果得到哈希碼長度為256位的信息鑒別碼。由於密鑰的妥善保管和其他安全措施的增加以20毫秒為單位的運算時間會遠遠超過人類壽命的可承受範圍。

三、HMAC-SHA256的使用場景

HMAC-SHA256算法在以下場景中得到了廣泛的應用:

  1. 網絡安全,例如在HTTPS、SSL和SSH這些安全連接中,使用HMAC-SHA256算法對網絡傳輸數據進行加密。

  2. 數字簽名,用來對數據進行身份鑒別,保證數據傳輸的完整性,確保數據未被篡改。

  3. 密碼學,HMAC-SHA256算法可作為證明算法,用來證明某個實體擁有特定的密鑰。

  4. API安全驗證,在API接口請求中,使用HMAC-SHA256算法保證數據在請求和響應傳輸過程中的完整性和安全性。

四、HMAC-SHA256的代碼示例

PHP的HMAC-SHA256加密

function hmac_sha256($key, $data){
  return hash_hmac('sha256', $data, $key, true);
}

$key = 'This_is_a_secret_key';
$data = 'This_is_a_message';
echo bin2hex(hmac_sha256($key, $data));  // 266c5f26f703f459fe1d1f05e7b44e27abd65c257abd16c910712d3f8d25b0b5

Java的HMAC-SHA256加密

public static String hmacSha256(String key, String data) {
  try {
      Mac hmac_SHA256 = Mac.getInstance("HmacSHA256");
      SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
      hmac_SHA256.init(secret_key);
      byte[] hash = hmac_SHA256.doFinal(data.getBytes(StandardCharsets.UTF_8));
      return bytesToHex(hash);
  } catch (NoSuchAlgorithmException | InvalidKeyException e) {
      throw new RuntimeException("Exception while encrypting data with HMAC-SHA256", e);
  }
}

public static String bytesToHex(byte[] bytes){
  StringBuilder builder = new StringBuilder();
  for (byte b : bytes) {
      builder.append(String.format("%02x", b & 0xff));
  }
  return builder.toString();
}

String key = "This_is_a_secret_key";
String data = "This_is_a_message";
System.out.println(hmacSha256(key, data));  // 266c5f26f703f459fe1d1f05e7b44e27abd65c257abd16c910712d3f8d25b0b5

Python的HMAC-SHA256加密

import hmac
import hashlib

def hmac_sha256(key, data):
  hmac_sha256 = hmac.new(key.encode('utf-8'), data.encode('utf-8'), hashlib.sha256).digest()
  return hmac_sha256.hex()

key = 'This_is_a_secret_key'
data = 'This_is_a_message'
print(hmac_sha256(key, data))  # 266c5f26f703f459fe1d1f05e7b44e27abd65c257abd16c910712d3f8d25b0b5

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/185285.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 12:18
下一篇 2024-11-26 12:18

相關推薦

  • Java加密算法詳解

    一、對稱加密算法 1、基本介紹 對稱加密算法是一種所謂的私密密鑰加密算法,其中使用同一個密鑰執行加密和解密操作。常見的對稱加密算法有DES、AES、RC4等。 2、使用示例代碼 i…

    編程 2025-04-23
  • Java AES CBC加密算法詳解

    一、加密算法介紹 Java AES CBC加密算法是一種高強度的加密算法,被廣泛運用於數據加密領域,其加密強度和安全性都是非常高的。 Java AES CBC加密算法採用對稱密鑰加…

    編程 2025-04-22
  • AES和DES加密算法詳細解析

    一、AES和DES的區別 AES(Advanced Encryption Standard)和DES(Data Encryption Standard)都是對稱加密算法,但是它們之…

    編程 2025-04-13
  • SHA256 & MD5 加密算法詳解

    SHA256和MD5是當前網站、應用程序和數據庫等系統中最被使用的加密算法之一。它們能夠安全、高效地將敏感數據通過加密的方式傳輸和存儲。 一、SHA256算法 1、SHA256算法…

    編程 2025-04-12
  • XXTEA加密算法詳解

    一、什麼是XXTEA加密算法 XXTEA是一種簡單高效的對稱加密算法,它屬於小型加密算法。由於算法體積小,在嵌入式設備上非常適用,比如傳感器、智能卡、存儲卡等等。XXTEA使用32…

    編程 2025-04-12
  • 詳解hash md5加密算法

    一、md5算法概述 MD5 (Message Digest Algorithm 5)算法是一種常用的哈希加密算法,常用於對用戶口令進行加密,也可用於驗證數據的完整性、數字簽名等。M…

    編程 2025-02-15
  • AES加密算法詳解

    AES是對稱加密算法中一種非常常用的加密算法,既能加密也能解密,其加密速度較快,且安全性好。本篇文章將從多個方面對AES算法做詳細的闡述。 一、AES算法簡介 AES是一種對稱加密…

    編程 2025-01-21
  • C# AES加密算法:實現數據加密和解密的方法

    一、C# AES加密算法簡介 Cryptography是保護信息不被未授權訪問的技術。加密算法是Cryptography中的重頭戲。現在加密算法被廣泛應用於不僅僅是數據安全,還有身…

    編程 2025-01-16
  • Python實現CG1加密算法

    一、什麼是CG1加密算法 CG1加密算法是一種基於同餘方程的非對稱加密算法,其安全性基於離散對數難題。該算法的基本思想是: 1.選取兩個足夠大的質數p和q,計算n=pq; 2.從2…

    編程 2025-01-16
  • Python中hmac的使用方法

    引言 在Python中,hmac模塊提供了一種方便的方法來生成HMAC(基於哈希的消息驗證代碼)。HMAC是一種涉及哈希函數和一個秘密密鑰的消息認證碼,對於具有消息認證要求的應用程…

    編程 2025-01-11

發表回復

登錄後才能評論