当前位置:  开发笔记 > 编程语言 > 正文

什么是访问C库的最pythonic方式 - 例如,OpenSSL?

如何解决《什么是访问C库的最pythonic方式-例如,OpenSSL?》经验,为你挑选了3个好方法。

我需要访问OpenSSL的加密函数来编码CBC流中的Blowfish数据.我用Google搜索并找到了一些Blowfish库(手写)和一些OpenSSL包装器(似乎没有一个完整的.)

最后,我需要访问某些OpenSSL函数,例如完整的blowfish.h 命令库.什么是pythonic /正确的访问方式?使用类似SWIG的东西来允许Python/C绑定,还是有更好的方法?

谢谢!



1> Ned Batcheld..:

ctypes是开始的地方.它允许你使用C声明的类型等调用DLL.我不知道是否有限制会阻止你做你需要的一切,但它非常强大,它包含在标准库中.



2> Benjamin Pet..:

有很多方法可以在Python中与C(和C++)进行交互.ctypes非常适合快速的小扩展,但它有将编译时错误转换为运行时段错误的习惯.如果你想编写自己的扩展,SIP非常好.SWIG很一般,但有更多的追随者.当然,你应该做的第一件事就是看你是否真的需要接口.你看过PyCrypto了吗?



3> joeforker..:

我很喜欢用于河豚的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

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有