前言

需要使用到sm2算法,但是客户只提供了sm2的java版本,网上也了解了一下这个算法,看的也是蒙的。也在github上找到了相关php实现sm2的代码,但是测试总是和客户发送的jar包对不上。想的是干脆直接调用客户发过来的jar算了。

思考

调用方式一般容易想到的就是两种:

  • 直接使用php的exec或者其他能够调用shell命令的函数执行 java -jar jar包,这种需要将客户发送过来的jar进行一次封装。
  • 把客户的demo,做成一个对外的接口,让php发送curl请求来调用。

因为搭建web站点,比较耗费服务器性能,并且只是为了这么一个小的调用,浪费经历搭建,维护,监控。实在是没有必要。

因此选择了第一种方式。如果需要第二种的可以自己去尝试。

安装包截图如下:

java调用自定义jar包函数 java调用本地jar包中的接口_java调用自定义jar包函数


都封装好了,只需要执行入口函数代码即可:

java调用自定义jar包函数 java调用本地jar包中的接口_php调用jar_02


就是这么一个入口的Java文件,需要做一次封装。

封装jar

走过的坑:

最开始我直接用idea打开入口文件,并添加引用,本来想直接运行但是好像连run按钮都没有出来,

java调用自定义jar包函数 java调用本地jar包中的接口_jar_03


不晓得是为啥。

于是新建了一个Java项目,把代码拷贝过来,报错了,提示xxx不存在,一看就是类库jar没有找到,于是

添加依赖库:选择客户给的demo里面所有的jar依赖。

java调用自定义jar包函数 java调用本地jar包中的接口_jar_04


然后我们修改 代码把需要加密的内容通过命令行参数传进来,

java调用自定义jar包函数 java调用本地jar包中的接口_php_05

打包

我们在菜单file–>project Structure中新建一个artifacts

java调用自定义jar包函数 java调用本地jar包中的接口_jar_06


配置如图:注意入口类的名称即可

java调用自定义jar包函数 java调用本地jar包中的接口_java调用自定义jar包函数_07


点击确定后:勾选

java调用自定义jar包函数 java调用本地jar包中的接口_jar_08


然后build

java调用自定义jar包函数 java调用本地jar包中的接口_封装_09


完成之后会出现:

java调用自定义jar包函数 java调用本地jar包中的接口_java调用自定义jar包函数_10


这时候我们来运行一下:

java调用自定义jar包函数 java调用本地jar包中的接口_php调用jar_11

php调用

java调用自定义jar包函数 java调用本地jar包中的接口_jar_12


浏览器访问:

java调用自定义jar包函数 java调用本地jar包中的接口_php_13

一个最简单的demo就完成了