HMACSHA1 加密演算法
https://blog.csdn.net/z69183787/article/details/78393216
***********************************************************
HMACSHA1 是從 SHA1 雜湊函式構造的一種鍵控雜湊演算法,被用作 HMAC(基於雜湊的訊息驗證程式碼)。 此 HMAC 程序將金鑰與訊息資料混合,使用雜湊函式對混合結果進行雜湊計算,將所得雜湊值與該金鑰混合,然後再次應用雜湊函式。 輸出的雜湊值長度為 160 位。
在傳送方和接收方共享機密金鑰的前提下,HMAC 可用於確定通過不安全通道傳送的訊息是否已被篡改。 傳送方計算原始資料的雜湊值,並將原始資料和雜湊值放在一個訊息中同時傳送。 接收方重新計算所接收訊息的雜湊值,並檢查計算所得的 HMAC 是否與傳送的 HMAC 匹配。
因為更改訊息和重新生成正確的雜湊值需要金鑰,所以對資料或雜湊值的任何更改都會導致不匹配。 因此,如果原始的雜湊值與計算得出的雜湊值相匹配,則訊息通過身份驗證。
SHA-1(安全雜湊演算法,也稱為 SHS、安全雜湊標準)是由美國政府釋出的一種加密雜湊演算法。 它將從任意長度的字串生成 160 位的雜湊值。
HMACSHA1 接受任何大小的金鑰,併產生長度為 160 位的雜湊序列。
package com.hujl.oauth.signature; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class HMACSHA1 { private static final String MAC_NAME = "HmacSHA1"; private static final String ENCODING = "UTF-8"; /* * 展示了一個生成指定演算法金鑰的過程 初始化HMAC金鑰 * @return * @throws Exception * public static String initMacKey() throws Exception { //得到一個 指定演算法金鑰的金鑰生成器 KeyGenerator KeyGenerator keyGenerator =KeyGenerator.getInstance(MAC_NAME); //生成一個金鑰 SecretKey secretKey =keyGenerator.generateKey(); return null; } */ /** * 使用 HMAC-SHA1 簽名方法對對encryptText進行簽名 * @param encryptText 被簽名的字串 * @param encryptKey 金鑰 * @return * @throws Exception */ public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception { byte[] data=encryptKey.getBytes(ENCODING); //根據給定的位元組陣列構造一個金鑰,第二引數指定一個金鑰演算法的名稱 SecretKey secretKey = new SecretKeySpec(data, MAC_NAME); //生成一個指定 Mac 演算法 的 Mac 物件 Mac mac = Mac.getInstance(MAC_NAME); //用給定金鑰初始化 Mac 物件 mac.init(secretKey); byte[] text = encryptText.getBytes(ENCODING); //完成 Mac 操作 return mac.doFinal(text); } }
***************************************
password=`echo -en "$date" | openssl dgst -sha1 -hmac $apiKey -binary | openssl enc -base64`
等價於
HmacSHA1Encrypt(String $date, String $apiKey) 然後base64編碼