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
原文地址:https://www.cnblogs.com/zhoudaxing/p/12400904.html