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