可用于微信小程序支付,计算签名值。
@Slf4j
public class RSAUtil {
private static final String ENCODING = "UTF-8";
private static final String SIGNATURE_ALGORITHM = "SHA256withRSA";
public static String sign256(String data, PrivateKey privateKey) throws Exception {
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initSign(privateKey);
signature.update(data.getBytes(ENCODING));
return Base64Utils.encodeToString(signature.sign());
}
public static boolean verify256(String data, String sign, PublicKey publicKey) {
try {
Signature signetCheck = Signature.getInstance(SIGNATURE_ALGORITHM);
signetCheck.initVerify(publicKey);
signetCheck.update(data.getBytes(StandardCharsets.UTF_8));
return signetCheck.verify(Base64Utils.decodeFromString(sign));
} catch (Exception e) {
log.error("RSAUtil verify error", e);
return false;
}
}
}
微信自动更新证书获取公钥 AutoUpdateCertificatesVerifier
加载微信私钥 PemUtil.loadPrivateKey(new ByteArrayInputStream(key.getBytes(StandardCharsets.UTF_8)))