python 隐私加密、java 调用、代码混淆

1,307 阅读4分钟

好消息!好消息!这篇是一个大礼包,不会详细阐述各个理论和教程,只是因为项目需要,对网上的各种文章进行了搜集,总结于此,需要请自取。

一、隐私加密主要是针对代码中的关键信息,比如账号密码等,常见的方法有以下几种:

1.直接用 base64 对明文进行加密,缺点就是直接运行函数可以解密出原密码明文 。

可以参考这个文档:https://cloud.tencent.com/developer/article/1567178 。

2.用 jasypt-spring-boot 加密组件,自定义密钥类,来对明文进行加密,然后将密文放到配置文件,这种方法要配合 java 框架才能使用。

可以参考这个文档 :https://segmentfault.com/a/1190000022462721 。

3.使用 Pycrypto 提供的 RSA 算法生成公、私钥来对内容进行加密和解密,但是这是适用于对 B/S 架构的,对于都要部署到公安内网的场景不是很适合,私钥暴露没有意义。

可以参考这个文档:https://www.jb51.net/article/174463.htm 。

4.使用 Crypto.Cipher 提供的 AES 算法用同一个密钥对内容进行加密和解密饿,但是对密钥的管理很令人担心。

可以参考这个文档:https://blog.csdn.net/weixin_43790276/article/details/100063132 。

5.使用 hmac / md5 等单向加密算法,此时任何人都不知道该用户的明文密码,但是这怎么放到代码中使用是个问题。

可以参考这个文档:https://blog.csdn.net/llf_cloud/article/details/81142878 。

二、java 调用 python 代码的几种方法

1.通过 java 中的 runtime 调用 python 文件,与命令行直接执行 Python 程序的效果是一样的,可以在 Python 中读取传递的参数,也可以在 Java 中读取到 Python 的执行结果。需要注意的是,不能在 Python 中通过 return 语句返回结果,只能将返回值写入到标准输出流中,然后在 Java 中通过标准输入流读取 Python 的输出值。

具体方法可以参考这个文档:https://blog.csdn.net/qq_26591517/article/details/80441540

2.通过在 java 中 pom.xml 中配置 jython 的依赖,然后在 java 代码中调用 python 代码,虽然在 Java 中调用 Python 可以有多种方式解决,甚至因为 Jython 的出现更显得非常便利。但是这种程序间嵌套调用的方式不可取,首先抛开调用性能不说,增加了耦合复杂度。更加有效的方式应该是通过 RPC 或者 RESTful 接口进行解耦,这样各司其职,也便于扩展,良好的架构是一个项目能够健康发展的基础。在微服务架构大行其道的今天,这种程序间嵌套调用的方式将会逐渐被淘汰。

具体方法可以参考这个文档:https://cloud.tencent.com/developer/article/1504260

3.使用 Web Service 调用 python 服务,Python 编写路由,将请求封装为 Web 服务,然后 Java 客户端根据路由,发送请求给 python 服务端,python 服务端收到请求以后执行计算服务并返回结果,Python 将返回的计算结果Java 客户端,Java 客户端对结果进行解析即可。

具体方法可以参考这个文档:https://www.ctolib.com/guangxush-JavaClient_PythonServer.html

4.Python 服务端将服务直接注册到 gRPC 注册中心,Java 客户端通过端口号映射请求相关的服务,gRPC 协议层接受服务之后,由应用层对服务进行处理,可以直接调用注册的服务实例,服务计算完成之后返回结果给 gRPC ,响应回调通知线程,Java 客户端接收返回的结果。

具体方法可以参考这个文档:https://www.ctolib.com/guangxush-JavaClient_PythonServer.html

三、python 代码的混淆

1.Python 解释器在执行代码的过程中会首先生成 .pyc 文件,然后解释执行 .pyc 文件中的内容。当然了,Python 解释器也能够直接执行 .pyc 文件。而 .pyc 文件是二进制文件,无法直接看出源码内容。如果发行代码到客户环境时都是 .pyc 而非 .py 文件的话,这样就能达到保护 Python 代码的目的。

2.就是通过一系列的转换,让代码逐渐不让人那么容易明白,这就是障眼法,用无关代码来打乱阅读节奏。没有这些说明,在一些关键逻辑上就没那么容易明白了。

3.虽说 Cython 的主要目的是带来性能的提升,但是基于它的原理:将 .py/.pyx 编译为 .c 文件,再将 .c 文件编译为 .so(Unix) 或 .pyd(Windows),其带来的另一个好处保护代码。

具体方法可以参考这个文档:https://zhuanlan.zhihu.com/p/54296517

4.通过修改 python 解释器能解决源码保护的问题,那么也是可选的一条路,只是比较繁琐,需要扎实的理论知识和经验。

具体方法可以参考这个文档:https://zhuanlan.zhihu.com/p/54297880