跨语言加解密互通解决

最近有个需求,是需要对传输过程中的有关密码的信息进行RSA加密

我们想到的是请求整个连接的传输中密码全程采用加密,只有在真正使用的地方进行解密。

问题来了,我们在java中加密后,使用java解密没有问题,但同时我们这个密码需要传输到python中,这时python解密出现了问题。

时间紧任务重,目前是通过在python中调用java的解密的jar包去实现解密,后续找到跨语言解密方式再改。

1 java解密

我们解密用的是hutool的asymmetric包中的RSA解密
__

1
2
3
4
package cn.hutool.crypto.asymmetric;

RSA rsa = new RSA("私钥", null);
String password = new String(rsa.decrypt(password KeyType.PrivateKey));

2 python解密

这有点难搞,跨语言解密,搞了半天没搞出来。

临时想到一个解决方案,用python去调用java的jar包,跑java程序去解密

这样带来的问题就是性能损耗,因为python跑java需要启动jvm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import jpype
from tools import Common

# jre路径
jvm_path = Common.curFileDir() + r'/agent/jdk1.8.0_261/jre/lib/amd64/server/libjvm.so'
# hutool的jar包路径
hutoolJarpath = Common.curFileDir() + r'/tools/hutool-all-5.0.6.jar'
# jvm启动参数
Djava = "-Djava.class.path=" + hutoolJarpath
# 私钥
RSA_PRIVATE_KEY = 'MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A=='


# 解密
jpype.startJVM(jvm_path, '-ea', Djava)
JPackageAsymmetric = jpype.JPackage('cn.hutool.crypto.asymmetric')
JClassRSA = jpype.JClass('cn.hutool.crypto.asymmetric.RSA')
JClassRSAInstance = JClassRSA(RSA_PRIVATE_KEY, None)
message = JClassRSAInstance.decrypt("sdfjijgsdfgosafsfslasdfljilskjf", JPackageAsymmetric.KeyType.PrivateKey)
jpype.shutdownJVM()

3 踩坑

启动jvm的时候碰到了一个坑,在windows和linux和启动jvm调用文件不一样,百度千篇一律都没有提到这个问题,后来在Google上找了半天,才找到一篇

Windows上调用下面这个文件

1
jre\bin\server\jvm.dll

而在linux上需要调用这个文件

1
/jre/lib/amd64/server/libjvm.so

4 躺板板

红伞伞白杆杆,吃完一起躺板板

躺板板埋山山,亲朋都来吃饭饭

饭饭里有红伞伞,吃完全村埋山山,来年长满红伞伞

联系博主,加入【羊山丨交流社区】

联系博主


本博客所有文章除特别声明外,均为原创。版权归博主小马所有。任何团体、机构、媒体、网站、公众号及个人不得转载。如需转载,请联系博主(关于页面)。如其他团体、机构、媒体、网站、博客或个人未经博主允许擅自转载使用,请自负版权等法律责任!