背景
pyDES是纯的python DES加密算法实现。系统目前使用PyDES的3DES加密算法,但是性能低下,已成为系统目前的瓶颈,为提高性能,考虑换用C语言实现。
Google C语言的DES实现,PolarSSL排在前面,这是纯C的实现,决定采用。
编译PolarSSL
首先在PolarSSL的网站下载最新的源代码,解压。使用默认的配置文件编译出的结果是静态链接库(.a 文件),我用这个静态库在Python那边的C语言文件编译会失败,所以得编译成动态链接库(.so 文件)。如下修改配置文件:
- 打开PolarSSL的 library/Makefile 文件。
- 在文件头添加 SHARED = -shared。
然后在PolarSSL目录打开终端,执行
make all
等待编译完成之后执行安装
sudo make install
执行完上条命令之后我们可以看一下效果
ls /usr/local/lib/
ls /usr/local/include/
刚才编译好的文件都在以上目录存在了,这里需要注意,so文件只在 /usr/local/lib 目录下还是不够的,程序运行时会提示缺失,得复制到 /usr/lib 下。
sudo cp /usr/local/lib/libpolarssl.so.7 /usr/lib/
配置Python
按照我之前写的探究:使用C语言扩展Python3写好接口的C文件,源代码如下:
1 | /* |
这里用到了PolarSSL库里面的函数,加密字符串不足8byte的整数倍补0,加密密钥不足24位同样。
接下来配置编译文件 setup.py,在需要添加的库中包含 PolarSSL,代码如下:
1 | from distutils.core import setup, Extension |
编译
python3 setup.py build
编译出的 so 文件就可以被调用了。
性能对比
Python随机生成1000条data和key,保证正确的情况下分别调用两个函数测试性能。C语言只要0.02秒,Python则花了182秒,性能差距巨大。测试代码如下:
1 | import pyDes |