java.lang.SecurityException: JCE cannot authenticate the provider BC

在开发java使用RSA加密是遇到这个问题,

Exception in thread "main" java.lang.SecurityException: JCE cannot authenticate the provider BC
    at javax.crypto.Cipher.getInstance(Cipher.java:657)
    at com.suntien.hr.common.util.RSAUtils.encryptByPublicKey(RSAUtils.java:102)
    at com.suntien.hr.common.util.RSAUtils.main(RSAUtils.java:256)
Caused by: java.util.jar.JarException: file:/D:/Workspaces/MyEclipse2016/HR/WebRoot/WEB-INF/lib/fr-third-8.0.jar has unsigned entries - .classpath
    at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:500)
    at javax.crypto.JarVerifier.verifyJars(JarVerifier.java:361)
    at javax.crypto.JarVerifier.verify(JarVerifier.java:289)
    at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:159)
    at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:185)
    at javax.crypto.Cipher.getInstance(Cipher.java:653)
    ... 2 more

 

于是百度了各路大神方法,解决方案如下:

1. 在java下找到  jre/lib/security/java.security,添加一行代码:

       security.provider.9=org.bouncycastle.jce.provider.BouncyCastleProvider   //这里的9,视具体情况而定,你可能是是10,11...

2.添加2个扩展包到jre/lib/ext目录下:bcprov-jdk15-135.jar     bcprov-jdk16-143.jar

3.把你的class path中的有的BC的扩展包都删除

4.说maven会解压包导致jar包的签名不能使用,所以放在jre/lib/ext目录下,并使用Security.addProvider(new BouncyCastleProvider())添加Provider。

 

参考文章:

a、http://bbs.csdn.net/topics/390690044?list=lz,这个跟我出现的情况大致相同,但是没有答案。。。。

b、https://stackoverflow.com/questions/22160780/java-jce-cannot-authenticate-provider-bc-in-jarsplice-created-jar# ,这个试了下,但是全英文的也是有点蒙

c、http://blog.csdn.net/haihaa/article/details/77929874
d、https://blog.csdn.net/qq_15068711/article/details/54691934

 

最终通过方案4解决了。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值