对接支付渠道,通过绝对路径读取私钥正常,在maven项目的resource目录下,通过classpath路径的方式读取错误?
- 通过两种方法验证得出的输出结果都是true
--很大可能是因为私钥和公钥对接不上。
--A私钥 A1 公钥 B第三方私钥 ,B1第三方公钥
A1给第三方,B1从第三方拿到
A加密后,第三方拿到A1解密
B加密后返回数据,我方接受用B1解密 交叉校验
priKeyStream = new FileInputStream("/Users/xxx/workspace_pay/pay-tunnel/pay-tunnel-service/src/main/resources/cert/baofoo/bfkey_100025773@@200001173.pfx");
byte[] reads1 = new byte[priKeyStream.available()];
priKeyStream.read(reads1);
String a = new String(reads1);
System.out.println("a=" + a + " len:" + reads1.length);
priKeyStream = BaofooBizUtil.getSignCertByPath("cert/baofoo/bfkey_100025773@@200001173.pfx");
byte[] reads = new byte[priKeyStream.available()];
priKeyStream.read(reads);
String b = new String(reads);
System.out.println("b=" + a + " len:" + reads.length);
System.out.println("a eq b : " + a.equals(b) + " len:"+ (reads.length() == .length()));
-控制台没有答应错误,翻看代码原来在三方工具类中包异常信息都吞掉了,打印异常看到
java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.
百度了找到了解决方案,maven对它支持的几种类型外在编译的时候会对其他文件改写里面的内容
在pom文件中<plugins></plugins>中加入以下配置就OK
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration><encoding>UTF-8</encoding>
<!-- 过滤后缀为pem、pfx的证书文件 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>cer</nonFilteredFileExtension>
<nonFilteredFileExtension>pem</nonFilteredFileExtension>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
感谢作者的分享,讲的很详细:
https://blog.csdn.net/wolf_love666/article/details/51448596