更新
我有一个程序可以获取两个公钥和私钥来验证这些密钥。
这些密钥是否有效。
我们假设我们的密钥是有效的。
(pub,privateKey) = rsa.newkeys(1024)
但是我有 p、q 和 nlen 的关系。
这是我们的 p 和 q 的数学方程:
- 质数 p 和 q 的选择应符合以下约束条件:
(a) (p–1) 和 (q–1) 应与 公共指数 e.
(a) 条件成功通过。
但我看不懂(b)项。
另一方面,我们说 len(p) = len(q) = nlen/2。
nlen
等于模块的大小。
让我们谈谈这个条件:
这些代码是 p、q、d、e 和 nlen 的定义。
p = privkey.p
q = privkey.q
d = privkey.d
e = privkey.e
nlen = privkey.n.bit_length()
我们用这段代码实现了我们的条件:
if not sqrt(2) * (2 ** ((nlen/2) - 1)) <= p <= (2 ** (nlen/2)) - 1:
return "Invalid P prime number size"
使用以下代码实现的另一个条件:
检查 q len
if not sqrt(2) * (2 ** ((nlen/2) - 1)) <= q <= (2 ** (nlen/2)) - 1:
return "Invalid Q prime number size"
以上条件不匹配,他们的身体跑了。
无论如何,这个问题对于解密 len 条件是正确的。
第二个条件成功通过。
但首先将我写的错误扔给父类。
这是我的代码:
if not 2 ** (nlen/2) < d < lcm(p-1,q-1):
return "Invalid decryption key"
但是为什么?
我认为我的问题与 nlen 有关。因为在我使用 nlen 的任何地方,我的测试都没有通过和失败。
我检查了它的值,但我不知道我能做些什么来解决这个问题。