M2Crypto'的替代方案;Python 3中的s EVP

M2Crypto'的替代方案;Python 3中的s EVP,python,python-3.x,m2crypto,Python,Python 3.x,M2crypto,我正在拼命地尝试将一个老项目升级到Python 3,但我在3年多前编写的一个库使用了M2Crypto,这在Py3k下似乎不可用。它几乎不安装在Python2上,但这完全是另一回事 无论如何,我们只使用它的EVP模块对字符串进行签名。以下是我们M2Crypto的使用范围: from M2Crypto import EVP def sign_string(message, priv_key_string): key = EVP.load_key_string(priv_key_string

我正在拼命地尝试将一个老项目升级到Python 3,但我在3年多前编写的一个库使用了M2Crypto,这在Py3k下似乎不可用。它几乎不安装在Python2上,但这完全是另一回事

无论如何,我们只使用它的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从字符串加载密钥并对提供的消息进行签名。表面上看起来很简单,但我真的不知道发生了什么。对我来说,执行副总裁是个黑匣子

是否有其他在Python3中工作的EVP库?或者有人知道让M2Crypto在Python 3中工作的秘密吗?

好的,除此之外,上述内容可以很好地简化:

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