该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
偶碰见个问题,银行给提供了pem格式的私钥和pfx格式的公钥文件,对于别人发过来的请求,需要用公钥进行验签,返回给别人时用私钥加签到固定字段中。
从网上扣了点代码运行有些问题,求大神指教。。。。
/**
* 读取pem格式的私钥算法
* @param pem pem文件路径
* @param password 密码
* @throws Exception 异常处理
*/
public void loadPrivPEM(String pem, final String password)throws Exception {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource(pem);
BufferedReader br = null;
if (url != null) {
InputStream is = null;
try {
is = new FileInputStream(url.getFile());
} catch (FileNotFoundException e) {
is = classLoader.getResourceAsStream(pem);
}
BufferedInputStream bis = new BufferedInputStream(is);
br = new BufferedReader(new InputStreamReader(bis));
} else {
br = new BufferedReader(new FileReader(pem));
}
PEMReader reader = new PEMReader(br, new PasswordFinder() {
public char[] getPassword() {
return password.toCharArray();
}
});
KeyPair key = (KeyPair) reader.readObject();
br.close();
privKey = (RSAPrivateKey) key.getPrivate();
}
测试的时候
String privateKey = "E:/Workspaces/tt/yldf.pem";
String keyPswd = "";
String termSeq = "SSLL1100099";
StringBuffer preMessage = new StringBuffer();
preMessage.append(termSeq).append("|");
System.out.println(preMessage.toString());
EncUtils rsa = new EncUtils();
String signMac = "";
try {
rsa.loadPrivPEM(privateKey,keyPswd);
System.out.println("读取pem格式的私钥算法");
// 获取签名
signMac = new String(rsa.sign(preMessage.toString().getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
if (StringUtils.isEmpty(signMac)) {
System.out.println("签名失败");
} else {
System.out.println("签名成功");
System.out.println(signMac);
}
然后报错信息是
java.lang.SecurityException: class "org.bouncycastle.asn1.DEREncodable"'s signer information does not match signer information of other classes in the same package
跪求大神指导,我对这方面真心是灰常小白。。。。