我需要访问OpenSSL的加密函数来编码CBC流中的Blowfish数据.我用Google搜索并找到了一些Blowfish库(手写)和一些OpenSSL包装器(似乎没有一个完整的.)
最后,我需要访问某些OpenSSL函数,例如完整的blowfish.h 命令库.什么是pythonic /正确的访问方式?使用类似SWIG的东西来允许Python/C绑定,还是有更好的方法?
谢谢!
ctypes是开始的地方.它允许你使用C声明的类型等调用DLL.我不知道是否有限制会阻止你做你需要的一切,但它非常强大,它包含在标准库中.
有很多方法可以在Python中与C(和C++)进行交互.ctypes非常适合快速的小扩展,但它有将编译时错误转换为运行时段错误的习惯.如果你想编写自己的扩展,SIP非常好.SWIG很一般,但有更多的追随者.当然,你应该做的第一件事就是看你是否真的需要接口.你看过PyCrypto了吗?
我很喜欢用于河豚的M2Crypto(一个OpenSSL包装器).
import M2Crypto from M2Crypto import EVP import base64 import struct key = '0' * 16 # security FTW iv = '' # initialization vector FTW dummy_block = ' ' * 8 encrypt = EVP.Cipher('bf_cbc', key, iv, M2Crypto.encrypt) decrypt = EVP.Cipher('bf_cbc', key, iv, M2Crypto.decrypt) binary = struct.pack(">Q", 42) ciphertext = encrypt.update(binary) decrypt.update(ciphertext) # output is delayed by one block i = struct.unpack(">Q", decrypt.update(dummy_block)) print i