/**
* @param algorithm 签名算法: SHA1WithRSA / MD5withRSA等
* @param password 密码
* @param privateKeyPath pfx文件路径
* @throws Exception*/
publicRSASignUtils(String algorithm, String password, String privateKeyPath) throws Exception {this.algorithm =algorithm;this.password =password;try{
KeyStore ks= KeyStore.getInstance("PKCS12");
InputStream fis= RSASignUtils.class.getResourceAsStream(privateKeyPath);char[] nPassword = null;if ((password == null) || password.trim().equals("")) {
nPassword= null;
}else{
nPassword=password.toCharArray();
}
ks.load(fis, nPassword);
fis.close();
Enumeration enuml=ks.aliases();
String keyAlias= null;if(enuml.hasMoreElements()) {
keyAlias=(String) enuml.nextElement();
logger.info("RSASignUtils alias=[" + keyAlias + "]");
}
logger.info("RSASignUtils is key entry =" +ks.isKeyEntry(keyAlias));
PrivateKey prikey=(PrivateKey) ks.getKey(keyAlias, nPassword);
logger.info("RSASignUtils keystore type =" +ks.getType());
signature=Signature.getInstance(algorithm);
signature.initSign(prikey);
}catch(Exception e) {
logger.error(String.format("RSA signature object generate failure...%s", e.getMessage()));throwe;
}
}publicString generate(String body) throws UnsupportedEncodingException, SignatureException {//Read the string into a buffer
byte[] dataInBytes = body.getBytes("UTF-8");//update signature with data to be signed
signature.update(dataInBytes);//sign the data
byte[] signedInfo =signature.sign();return Base64.getEncoder().encodeToString(signedInfo);//Base64.encode(signedInfo);
}