importorg.apache.commons.codec.binary.Base64;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;import java.security.*;importjava.security.spec.PKCS8EncodedKeySpec;importjava.security.spec.X509EncodedKeySpec;public classRSAUtil {static Logger LOG = LoggerFactory.getLogger(RSAUtil.class);private static final String SIGNATURE_ALGORITHM = "SHA1withRSA"; //签名算法
private static final String KEY_ALGORITHM = "RSA"; //加密算法RSA
/*** 公钥验签
*
*@paramtext 原字符串
*@paramsign 签名结果
*@parampublicKey 公钥
*@return验签结果*/
public static booleanverify(String text, String sign, String publicKey) {try{
Signature signature=Signature.getInstance(SIGNATURE_ALGORITHM);
PublicKey key= KeyFactory.getInstance(KEY_ALGORITHM).generatePublic(newX509EncodedKeySpec(Base64.decodeBase64(publicKey)));
signature.initVerify(key);
signature.update(text.getBytes());returnsignature.verify(Base64.decodeBase64(sign));
}catch(Exception e) {
LOG.error("验签失败:text={},sign={}", text, sign, e);
}return false;
}/*** 签名字符串
*
*@paramtext 需要签名的字符串
*@paramprivateKey 私钥(BASE64编码)
*@return签名结果(BASE64编码)*/
public staticString sign(String text, String privateKey) {byte[] keyBytes =Base64.decodeBase64(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec= newPKCS8EncodedKeySpec(keyBytes);try{
KeyFactory keyFactory=KeyFactory.getInstance(KEY_ALGORITHM);
PrivateKey privateK=keyFactory.generatePrivate(pkcs8KeySpec);
Signature signature=Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initSign(privateK);
signature.update(text.getBytes());byte[] result =signature.sign();returnBase64.encodeBase64String(result);
}catch(Exception e) {
LOG.error("签名失败,text={}", text, e);
}return null;
}
}