替代M2Crypto的Python 3中的EVP

时间:2015-11-27 18:18:45

标签: python python-3.x m2crypto

我正在拼命地将一个旧项目升级到Python 3,但是我在3年前写的一个库使用的是M2Crypto,它似乎在Py3k下不可用。它几乎没有安装在Python 2上,但这完全是其他的东西。

无论如何,我们只使用它来为其EVP模块签名。以下是我们使用M2Crypto的程度:

from M2Crypto import EVP

def sign_string(message, priv_key_string):
    key = EVP.load_key_string(priv_key_string)
    key.reset_context(md='sha1')
    key.sign_init()
    key.sign_update(message)
    return key.sign_final()

使用SHA1从字符串加载密钥并签署提供的消息。从表面上看似乎很简单,但老实说我不知道​​发生了什么。 EVP对我来说是一个黑盒子。

是否还有其他可在Python 3中运行的EVP库?或者有人知道让M2Crypto在Python 3中工作的秘诀吗?

1 个答案:

答案 0 :(得分:0)

好的,除了another project's migration away from M2crypto to rsa之外,上面的内容可以很好地减少:

def sign_string(message, priv_key_string):
    import rsa
    key = rsa.PrivateKey.load_pkcs1(priv_key_string.encode())
    return rsa.sign(message.encode(), key, 'SHA-1')

这并不是说完全需要这样做。 Python3的字节/字符串分离带来了许多看似以前不是问题的东西。我确信这是有道理的,但是当你需要在成熟的代码中完成一个长时间的签名过程来解决你所说的内容时,它就是一个PITA。