zoukankan      html  css  js  c++  java
  • HMACSHA1 加密算法

    一、HMACSHA1算法介绍:

       HMACSHA1 是从 SHA1 哈希函数构造的一种键控哈希算法,被用作 HMAC(基于哈希的消息验证代码)。 此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数。 输出的哈希值长度为 160 位。(注意:HMACSHA1 接受任何大小的密钥,并产生长度为 160 位的哈希序列)

      在发送方和接收方共享机密密钥的前提下,HMAC 可用于确定通过不安全信道发送的消息是否已被篡改。 发送方计算原始数据的哈希值,并将原始数据和哈希值放在一个消息中同时传送。 接收方重新计算所接收消息的哈希值,并检查计算所得的 HMAC 是否与传送的 HMAC 匹配。因为更改消息和重新生成正确的哈希值需要密钥,所以对数据或哈希值的任何更改都会导致不匹配。 因此,如果原始的哈希值与计算得出的哈希值相匹配,则消息通过身份验证。SHA-1(安全哈希算法,也称为 SHS、安全哈希标准)是由美国政府发布的一种加密哈希算法。 它将从任意长度的字符串生成 160 位的哈希值。

    二、加密算法:

     1 //region HMACSHA1 加密算法
     2 
     3     /**
     4      * @param text    加密密文
     5      * @param secrete 密钥
     6      */
     7     public static String makeHMACSHA1(String text, String secrete) {
     8         //将urlpath和paramp
     9         Mac mac;
    10         byte[] bytes = new byte[0];
    11         try {
    12             //将报文和密钥转换成字节流
    13             byte[] textByte = text.getBytes(EncodingEnum.UTF_8.toString());
    14             byte[] secreteByte = secrete.getBytes(EncodingEnum.UTF_8.toString());
    15             //根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
    16             SecretKeySpec secretKey = new SecretKeySpec(secreteByte, HMAC_SHA1);
    17             //生成一个指定 Mac 算法 的 Mac 对象
    18             mac = Mac.getInstance(HMAC_SHA1);
    19             //用给定密钥初始化 Mac 对象
    20             mac.init(secretKey);
    21             //对进行签名
    22             mac.update(textByte);
    23             //
    24             bytes = mac.doFinal();
    25         } catch (Exception e) {
    26             PolyException.throwException(ErrorCodes.LOGICERROR, CoreUtils.exceptionToString(e));
    27         }
    28 
    29         //签名结果转换成字符串
    30         if (bytes == null) {
    31             return null;
    32         }
    33         char[] result = new char[bytes.length * 2];
    34         for (int i = 0; i < bytes.length; i++) {
    35             result[i * 2] = DIGITAL[(bytes[i] & 0xf0) >> 4];
    36             result[i * 2 + 1] = DIGITAL[bytes[i] & 0x0f];
    37         }
    38         return new String(result);
    39     }
    40 
    41     //endregion
  • 相关阅读:
    Java 重写(Override)与重载(Overload)
    【MyBatis】-----【MyBatis】---表级联系【一对一】--增删改查
    【MyBatis】----【MyBatis】--封装---别名---properties
    【MyBatis】-----初识【MyBatis】
    【Html5】表单全选、全不选
    【SSH】---【Struts2、Hibernate5、Spring4】【SSH框架整合笔记 】
    rabbitmq 消息持久化之receive and send
    git
    Tyrion中文文档(含示例源码)
    计算器源码
  • 原文地址:https://www.cnblogs.com/zhoudaxing/p/12400904.html
Copyright © 2011-2022 走看看