Python调用Jar包
前言
工作原因,需要在Python代码中调用一个Jar包中的加密方法,本来是想用Python重写加密方法的,但是看了一下Java代码,加密方法很是复杂,用到了SM2,SM4组合加密,因此还是选择使用Python直接调用Jar包的方式来进行数据加密,下面为调用方式。
本文不研究Jpype的原理,有兴趣可以自行搜索
调用方式
使用的库
Python调用Jar包主要使用的是JPype,导入的库名称为JPype1,这个不要导入错了
可以直接控制台输入这个命令导入:pip3 install JPype1
使用方式
-
在IDEA中将Jar包打好,此处不使用maven打包,因为一般这个加密方法都不是使用的框架,而是单独的几个工具方法,所以使用普通的打Jar包方法就行,这里不再赘述,如有需要可以百度 IDEA打Jar包
-
Jar包打好之后,将Jar放在Python项目中,最好是文件同层级目录,如下图:
-
引入之后可按以下代码来调用Jar包中的方法
# 启动jvm虚拟机
jvm_path = jpype.getDefaultJVMPath()
jpype.startJVM(jvm_path, '-ea', '-Djava.class.path=%s' % 'client.jar', convertStrings=False)
# 加载类
jclass = jpype.JClass('com.util.SGClientUtils')
# 传入所需参数
sm2Util = jclass()
# 调用具体的加密方法
sm2Util.encryption(参数)
# 关闭虚拟机(必须保证最后关闭虚拟机,可以使用try finally)
jpype.shutdownJVM()
一些小问题
- 打Jar包的时候要注意主方法的选择
- 使用Jpype开启JVM虚拟机时,只能开启一次,Jpype不允许重复开启关闭虚拟机,重复开启关闭会报错,所以使用的时候要注意写法。