HmacSHA256摘要算法


 
         

  mac(Message Authentication Code,消息認證碼算法)是含有密鑰散列函數算法,兼容了MD和SHA算法的特性,並在此基礎上加上了密鑰。

 
         

甲乙雙方進行數據交換可以采取如下流程完成

 
         

1、甲方向乙方公布摘要算法(就是指定要使用的摘要算法名)

 
         

2、甲乙雙方按照約定構造密鑰,雙方擁有相同的密鑰(一般是一方構造密鑰后通知另外一方,此過程不需要通過程序實現,就是雙方約定個字符串,但是這個字符串可不是隨便設定的,也是通過相關算法獲取的)

 
         

3、甲方使用密鑰對消息做摘要處理,然后將消息和生成的摘要消息一同發送給乙方

 
         

4、乙方收到消息后,使用甲方已經公布的摘要算法+約定好的密鑰 對收到的消息進行摘要處理。然后比對自己的摘要消息和甲方發過來的摘要消息。甄別消息是否是甲方發送過來的



import
java.nio.charset.Charset; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /** * MAC消息摘要組件 * * */ public class MACCoder { private static final Charset UTF_8 = Charset.forName("UTF-8"); /** * 初始化HmacSHA256的密鑰 * @return byte[] 密鑰 * * */ public static byte[] initHmacSHA256Key() throws Exception{ //初始化KeyGenerator KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacSHA256"); //產生密鑰 SecretKey secretKey=keyGenerator.generateKey(); //獲取密鑰 return secretKey.getEncoded(); } public static byte[] encodeHmacSHA256_2(byte[] data1,byte[] key) throws Exception{ SecretKey secretKey=new SecretKeySpec(key,"HmacSHA256"); Mac mac=Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); mac.update(data1); return mac.doFinal(); } /** * 進行相關的摘要算法的處理展示 * @throws Exception * **/ public static void main(String[] args) throws Exception { String str="2019-12-09T02:27:42-07:00"; System.out.println("原文="+str); byte[] key=MACCoder.initHmacSHA256Key(); //byte[] key="0X84NSTAokzW1iWCCLFIzP1JYv1utSUT".getBytes(UTF_8); byte[] datas=MACCoder.encodeHmacSHA256_2(str.getBytes(UTF_8), key); System.out.println("HmacSHA256的密鑰:"+key.toString()); System.out.println("HmacSHA256算法摘要:"+new String(datas)); System.out.println(); } }

輸出:

原文=2019-12-09T02:27:42-07:00
HmacSHA256的密鑰:[B@1ff8b8f
HmacSHA256算法摘要:�

--END-- 2019-12-10 10:15


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM