Я пишу программу, которая будет вычислять закрытый ключ для слабого открытого ключа RSA.Мне интересно, как бы я мог определить значения для p
и q
из значения n
.Вот код Python на данный момент:
from Crypto.PublicKey import RSA #PyCryptoDome
import .math as cm # My own module
with open(public_keyfile, 'rb') as key: # Public Keyfile Is in PEM format
public_key = RSA.import_key(key)
n = public_key.n # N value of the public_key
e = public_key.e # E value of the public_key
p, q = get_factors_of(n) # This I don't know how to do, though there is a question that might help [see bottom]
t = cm.lcm(p-1, q-1) # Get the lowest common multiple of q and q
d = cm.mod_inverse(e, t) # Get d, the modular inverse of e % t
private_key = RSA.construct((n, e, d, p, q) # Construct the RSA private_key
Модуль .math
, на который есть ссылки выше:
from math import gcd
def mod_inverse(a, b):
a = a % b
for x in range(1, b):
if (a * x) % b == 1:
return x
return 1
def lcm(x, y):
return x * y // gcd(x, y)
То, что мне нужно сделать, похоже, указано здесь здесь но этот код написан на Java.
Если кто-нибудь знает, как получить p
и q
из n
с помощью python, мы будем благодарны за помощь.
Большое спасибо, Легорой.