package com.ruoyi.payment.infrastructure.util;
|
|
import org.apache.commons.codec.digest.DigestUtils;
|
|
import javax.crypto.Mac;
|
import javax.crypto.spec.SecretKeySpec;
|
import java.nio.charset.StandardCharsets;
|
import java.security.InvalidKeyException;
|
import java.security.NoSuchAlgorithmException;
|
import java.util.Base64;
|
|
/**
|
* 签名工具类
|
*
|
* @author ruoyi
|
*/
|
public class SignUtil {
|
|
/**
|
* MD5签名
|
*
|
* @param data 待签名数据
|
* @return 签名结果
|
*/
|
public static String md5(String data) {
|
return DigestUtils.md5Hex(data).toUpperCase();
|
}
|
|
/**
|
* HMAC-SHA256签名
|
*
|
* @param data 待签名数据
|
* @param secret 密钥
|
* @return 签名结果(Base64编码)
|
*/
|
public static String hmacSha256(String data, String secret) {
|
try {
|
Mac mac = Mac.getInstance("HmacSHA256");
|
SecretKeySpec secretKeySpec = new SecretKeySpec(
|
secret.getBytes(StandardCharsets.UTF_8),
|
"HmacSHA256"
|
);
|
mac.init(secretKeySpec);
|
byte[] bytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
|
return Base64.getEncoder().encodeToString(bytes);
|
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
|
throw new RuntimeException("HMAC-SHA256签名失败", e);
|
}
|
}
|
|
/**
|
* 验证HMAC-SHA256签名
|
*
|
* @param data 原始数据
|
* @param secret 密钥
|
* @param signature 签名
|
* @return 是否验证通过
|
*/
|
public static boolean verifyHmacSha256(String data, String secret, String signature) {
|
String calculated = hmacSha256(data, secret);
|
return calculated.equals(signature);
|
}
|
}
|