生成签名
/**
* SHA1WithRSA 签名
*
* @param content 待签名数据
* @param privateKey 私钥
* @return 签名值
*/
public static String sign(String content, String privateKey) {
try {
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
// 这里签名使用的是 SHA1WithRSA
Signature signature = Signature.getInstance("SHA1WithRSA");
// 以私钥字符串初始化签名
signature.initSign(priKey);
// 将原始串注入签名中
signature.update(content.getBytes());
// 签名后的结果,以字符数组形式存在
byte[] signed = signature.sign();
// 签名后的结果,以base64编码形式存在
return Base64.encode(signed);
} catch (Exception e) {
e.printStackTrace();
}
return StringUtils.EMPTY;
}
验证签名
/**
* 功能描述:公钥校验签名
*
* @param content 签名原串
* @param sign 签名串
* @param publicKey 公钥字符串
* @return boolean 校验是否成功
* @date 2020/11/12
*/
public static boolean doCheck(String content, String sign, String publicKey) {
try {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
byte[] encodedKey = Base64.decode(publicKey);
PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
// 使用 SHA1WithRSA 签名算法
Signature signature = Signature.getInstance("SHA1WithRSA");
// 用公钥初始化签名校验
signature.initVerify(pubKey);
// 原始串注入签名校验中
signature.update(content.getBytes());
// 验证签名结果
return signature.verify(Base64.decode(sign));
} catch (Exception e) {
e.printStackTrace();
}
return false;
}