【发布时间】:2019-03-22 00:29:42
【问题描述】:
在我的 Python 代码中,我使用了 cryptography 模块。我在磁盘上有一个私钥。因此,从文档中,我使用 this example 加载该密钥。然后使用该密钥签署消息。但是运行程序会抛出 AttributeError: '_RSAPrivateKey' object has no attribute 'sign'
我查看了serialization 模块的源代码并检查了load_pem_private_key() 的返回类型。该代码需要对抽象基类有所了解。
在此处寻求帮助以调试此问题。
这是我的代码
1 from cryptography.hazmat.backends import default_backend
2 from cryptography.hazmat.primitives import hashes
3 from cryptography.hazmat.primitives import serialization
4 from cryptography.hazmat.primitives.asymmetric import padding
5 from cryptography.hazmat.primitives.asymmetric import utils
6
7 from base64 import b64encode
8
9 def test_new_crypto():
10 privkey = '/path/to/privkey'
11 with open(privkey, "rb") as kf:
12 private_key = serialization.load_pem_private_key(
13 kf.read(),
14 password=None,
15 backend=default_backend()
16 )
17
18 message = b"A message I want to sign"
19 signature = private_key.sign( #### Error is here
20 message,
21 padding.PSS(
22 mgf=padding.MGF1(hashes.SHA256()),
23 salt_length=padding.PSS.MAX_LENGTH
24 ),
25 hashes.SHA256()
26 )
27
28 return b64encode(signature)
29
30 if __name__ == "__main__":
31 print(test_new_crypto())
【问题讨论】:
-
你试过升级
cryptography的版本吗?此错误消息表明您的cryptography版本非常过时。 -
看起来你有一个非常旧版本的库。 This issue 有关于添加此功能的讨论。这是the commit
-
@PaulKehrer @"A. Albershteyn" 你是对的。我运行的是 1.7.1,升级到 2.6.1 解决了这个问题。
标签: python cryptography