dos*_*rog 4 python cryptography rsa
我正在使用 Pythoncryptography库,我需要用 RSA 加密一些东西。一切都很好,除了一件事。
当我生成密钥时,我需要以十六进制形式获取模数 n、公共指数和私有指数,以便我可以将它们以自定义格式保存到文件中。这不是用于现实世界的用途,我是为课堂作业而做的。
我搜索了cryptography有关 RSA 的整个文档,但找不到任何类似的方法get_modulus_or_exponents()或任何可以暗示类似内容的方法。
我能想到获取这些数字的唯一方法是序列化密钥,然后subprocess是openssl命令并以如下形式读取它:
Modulus (2048 bit):
00:98:10:23:16:ff:b6:f4:26:a2:42:a6:19:23:0e:
0f:27:4a:b9:43:3d:a0:4b:b9:1b:1a:57:92:dd:a8:
bc:5d:b8:6e:e6:7f:0f:2e:89:a5:77:16:d1:cf:44:
[...]
f3:0d:5b:90:6b:de:59:58:c9:f4:26:4a:61:b4:52:
21:1d
Exponent: 65537 (0x10001)
Run Code Online (Sandbox Code Playgroud)
解析它,并提取所需的信息。
有没有cryptography比这种解决方法更好的方法(最好使用的工具)(我是否遗漏了文档中的某些内容?)或者cryptography真的不允许任何其他方式来获取所需的信息?
编辑:这是我用来生成密钥和加密的代码,与文档示例基本相同:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
private_key = rsa.generate_private_key(public_exponent=65537,
key_size=self.key_size * 8,
backend=default_backend()
)
public_key = private_key.public_key()
ciphertext = public_key.encrypt(message, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()),algorithm=hashes.SHA1(),label=None))
Run Code Online (Sandbox Code Playgroud)
您可以使用public_numbers()和访问private_numbers()
public_key.public_numbers()
private_key.private_numbers()
Run Code Online (Sandbox Code Playgroud)
查看可用内容的一个好方法是使用 dir:
In [13]: [a for a in dir(public_key) if not a.startswith("_")]
Out[13]: ['encrypt', 'key_size', 'public_bytes', 'public_numbers', 'verifier']
In [14]: [a for a in dir(private_key) if not a.startswith("_")]
Out[14]:
['decrypt',
'key_size',
'private_bytes',
'private_numbers',
'public_key',
'signer']
In [15]: [a for a in dir(private_key.private_numbers()) if not a.startswith("_")]
Out[15]: ['d', 'dmp1', 'dmq1', 'iqmp', 'p', 'private_key', 'public_numbers', 'q']
In [16]: [a for a in dir(public_key.public_numbers()) if not a.startswith("_")]
Out[16]: ['e', 'n', 'public_key']
In [17]: [a for a in dir(private_key.private_numbers().public_numbers) if not a.startswith("_")]
Out[17]: ['e', 'n', 'public_key']
Run Code Online (Sandbox Code Playgroud)
您会发现实际上只需使用私钥即可访问所有属性。
| 归档时间: |
|
| 查看次数: |
2047 次 |
| 最近记录: |