最近有个项目需要加密数据,然后密码学中的定律就是:
- 硬件加密快于软件加密
- 编译加密快于脚本加密
所以基于硬件不可能,脚本又太慢的情况下,我们就开始用C语言写Python的模块扩展
写的方法网上有很多,我就不一一赘述了
主要想实现的功能就是通过Python向模块中传入一个字符串和一个密钥
然后解密的时候再根据密钥解密,我采用的AES是256bit的密钥。。。也是最大密钥长度
初始密钥长32bit
,每次加密的明文长16bit
,然后我们开始
选择AES的时候我看了python著名的加密库pycrypto
的源代码,按理来说,使用这个现成的库会方便很多,但是,这个库并不在pip
中,所有安装配置也是比较麻烦,所有我就想写一个python的模块扩展,直接从本地中导入模块,这样配置的时候只要这个扩展.so
文件在同一个目录下,就可以正常工作了。
然后选择256bit的加密强度是考虑到工程的向后发展,毕竟现在AES也是有有效的攻击手段了,所有只好选用最强的加密方式。
然后我也看了很著名的AES开源项目
但是他的加密强度只达到了128bit,所有也不能用
最后选择了一个写的比较好的AES算法这里是作者的github
然后我改了一下形成Python的扩展模块
其中的难点就是Python模块的传入数据只能是int
,或者string
再或者其他什么鬼类型,就是没有数组
然后我们就只好通过python向模块中传入字符串==,再通过C代码的处理,填入数组中计算加密
然后这个处理有点变扭,也是学艺不精吧,我先是写入一个文件中,再从文件的stream流中一字节一字节读取,然后填入数组中
然后就是正常的加密解密
然后附上代码的地址,欢迎大家fork