|
|
|
package com.dxhy.sign.util;
|
|
|
|
|
|
|
|
import java.nio.charset.Charset;
|
|
|
|
import java.security.InvalidKeyException;
|
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
|
|
|
|
import javax.crypto.Mac;
|
|
|
|
import javax.crypto.SecretKey;
|
|
|
|
import javax.crypto.spec.SecretKeySpec;
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* HmacSHA1工具类
|
|
|
|
*
|
|
|
|
* @author jiaohongyang
|
|
|
|
*/
|
|
|
|
@SuppressWarnings("AlibabaClassNamingShouldBeCamel")
|
|
|
|
@Slf4j
|
|
|
|
public class HmacSHA1Util {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* HmacSHA1生成签名值
|
|
|
|
*
|
|
|
|
* @param data
|
|
|
|
* 数据
|
|
|
|
* @param key
|
|
|
|
* 密钥
|
|
|
|
* @return 签名值
|
|
|
|
*/
|
|
|
|
public static String hmacsha1(String data, String key) {
|
|
|
|
byte[] keyData = key.getBytes(Charset.forName("UTF-8"));
|
|
|
|
try {
|
|
|
|
SecretKey signingKey = new SecretKeySpec(keyData, "HmacSHA1");
|
|
|
|
Mac mac = Mac.getInstance("HmacSHA1");
|
|
|
|
mac.init(signingKey);
|
|
|
|
byte[] doFinal = mac.doFinal(data.getBytes());
|
|
|
|
return byteArrayToHexStr(doFinal);
|
|
|
|
} catch (NoSuchAlgorithmException e) {
|
|
|
|
log.error("NoSuchAlgorithmException", e);
|
|
|
|
} catch (InvalidKeyException e) {
|
|
|
|
log.error("InvalidKeyException", e);
|
|
|
|
} catch (Exception e) {
|
|
|
|
log.error("未知异常", e);
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 将字节数组转换成16进制字符串
|
|
|
|
*
|
|
|
|
* @param byteArray
|
|
|
|
* 要转码的字节数组
|
|
|
|
* @return 返回转码后的16进制字符串
|
|
|
|
*/
|
|
|
|
public static String byteArrayToHexStr(byte[] byteArray) {
|
|
|
|
StringBuilder buffer = new StringBuilder(byteArray.length * 2);
|
|
|
|
int i;
|
|
|
|
for (i = 0; i < byteArray.length; i++) {
|
|
|
|
// 小于十前面补零
|
|
|
|
if (((int)byteArray[i] & 0xff) < 0x10) {
|
|
|
|
buffer.append("0");
|
|
|
|
}
|
|
|
|
buffer.append(Long.toString((int)byteArray[i] & 0xff, 16));
|
|
|
|
}
|
|
|
|
return buffer.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
|
|
|
String data = "POST10.51.112.141:18096/invoice/jxpt/api/v5/INVOICE.SINGLEINVOICECHECK?SecretId=c2FucWljZXNoaUFwcFNlY2lkUHJv&content=ewoJInB1cmNoYXNlclRheE5vIjoiIiwKCSJpbnZvaWNlQ29kZSI6IjAzNjAwMTkwMDEwNyIsCgkiaW52b2ljZU51bWJlciI6IjA4NTg1OTc4IiwKCSJiaWxsaW5nRGF0ZSI6IjIwMjAwOTI0IiwKCSJjaGVja0NvZGUiOiI4OTk0NDUiLAoJInRvdGFsQW1vdW50IjoiIiwKCSJpbnZvaWNlVHlwZSI6IjEwMTAzIgp9&dataExchangeId=1234567812345678123456781234567812300001&encryptCode=0&zipCode=0";
|
|
|
|
String key = "c2FucWljZXNoaUFwcHNlY0tleVBybw";
|
|
|
|
|
|
|
|
String signature = HmacSHA1Util.hmacsha1(data, key);
|
|
|
|
|
|
|
|
System.out.println("signature=" + signature);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|