和X公司对接数据,他们的开发语言是java,我们是php,双方数据通信的时候采用的加密方法是:bouncycastle
由于这个时间大神的限制,我们暂时不用PHP开发自己的加密算法,而是采用对方已有的加密包。
具体思路是:
1.将java写的的加密方法封装成jar包;
2.然后在php里面直接调用:exec("java -jar encrypt.jar")系统命令执行,实现加密解密
这里主要遇到2个问题:
1.cannot load mian class
2.调试过程中报错:java.lang.SecurityException: JCE cannot authenticate the provider BC
1.执行运行jar包的命令“java -jar encrypt.jar”报错:cannot load mian class
这个我们在万能的百度和google上面也找了很多资料,都没有解决,最后通过最古老的口传身教的方式,问了一个老谋深算的java程序员,解决了这个bug
方法是:
打包成jar包以后,在正式运行执行:java -jar之前,需要删除 .jar包中的一个文件:META-INF/BCKEY.DSA
至于这是为什么呢?这个问题我已经替大家问过大神了,大神表示世界很大,他想去看看
2.调试过程中报错:java.lang.SecurityException: JCE cannot authenticate the provider BC
这个问题百度是解决不了的,是google解决的,google里面有一篇解释很清楚完整的博客,原文地址:http://download.csdn.net/detail/tomliguocai/3945936
膜拜大神
以下是具体的解决方法:
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的扩展包都删除(这步我没有用到,因为class path里面没有这个)
经过这些处理以后,终于看到了乖乖的加密后的密文和数字签名,哈哈哈,happy~
java.lang.SecurityException: JCE cannot authenticate the provider BC
原文地址:http://blog.csdn.net/kkl_renwu/article/details/45583873