一、什麼是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是需要進行散列的數據。算法流程如下:
- 通過密鑰key經過一個特定的方法,將key轉換成一個value。
- 通過異或運算符(XOR)以填充value。如果key太長,即大於block_size位,需要通過SHA-256散列函數將key壓縮到block_size位。
- 將填充後的value和data傳遞給SHA-256哈希函數,得到一個256位的哈希值。
- 將哈希值作為結果返回。
這樣,我們就得到了一個充分利用密鑰安全性的、結果得到哈希碼長度為256位的信息鑒別碼。由於密鑰的妥善保管和其他安全措施的增加以20毫秒為單位的運算時間會遠遠超過人類壽命的可承受範圍。
三、HMAC-SHA256的使用場景
HMAC-SHA256算法在以下場景中得到了廣泛的應用:
- 網絡安全,例如在HTTPS、SSL和SSH這些安全連接中,使用HMAC-SHA256算法對網絡傳輸數據進行加密。
- 數字簽名,用來對數據進行身份鑒別,保證數據傳輸的完整性,確保數據未被篡改。
- 密碼學,HMAC-SHA256算法可作為證明算法,用來證明某個實體擁有特定的密鑰。
- 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