• 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

  • 相关阅读:
    hdu Boring counting
    hdu Connections between cities
    hdu Median Filter
    hdu Entropy
    hdu Box Relations
    未能加载数据集 加载DataSet错误
    SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究
    Spread.NET中文开发文档汇总
    ChartDirector资料小结
    AmCharts图表JavaScript Charts参数
  • 原文地址:https://www.cnblogs.com/heyang78/p/12014710.html
Copyright © 2020-2023  润新知