最近有个需求,是需要对传输过程中的有关密码的信息
进行RSA加密
。
我们想到的是请求整个连接的传输中密码全程采用加密
,只有在真正使用的地方进行解密。
问题来了,我们在java中加密后,使用java解密
没有问题,但同时我们这个密码需要传输到python
中,这时python解密
出现了问题。
时间紧任务重,目前是通过在python中调用java的解密的jar包
去实现解密,后续找到跨语言解密方式
再改。
关注博主不迷路,获取更多干货资源
1 java解密
我们解密用的是hutool的asymmetric
包中的RSA解密
__
| 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
上调用下面这个文件
而在linux上
需要调用这个文件
| /jre/lib/amd64/server/libjvm.so
|
4 躺板板
红伞伞白杆杆,吃完一起躺板板
躺板板埋山山,亲朋都来吃饭饭
饭饭里有红伞伞,吃完全村埋山山,来年长满红伞伞
关注博主不迷路