mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-01-18 16:27:02 +00:00
fix implementation errors. (#1568)
I revised my implementation and found out that I have miss a inner loop for t. x and y should be recalculated everytime when t is divisble by 2. I have also included a more readble source for this algorithm.
This commit is contained in:
parent
ea9bf0a90c
commit
e3aa0f65e8
|
@ -4,6 +4,7 @@ An RSA prime factor algorithm.
|
|||
The program can efficiently factor RSA prime number given the private key d and
|
||||
public key e.
|
||||
Source: on page 3 of https://crypto.stanford.edu/~dabo/papers/RSA-survey.pdf
|
||||
More readable source: https://www.di-mgt.com.au/rsa_factorize_n.html
|
||||
large number can take minutes to factor, therefore are not included in doctest.
|
||||
"""
|
||||
import math
|
||||
|
@ -35,6 +36,7 @@ def rsafactor(d: int, e: int, N: int) -> List[int]:
|
|||
while p == 0:
|
||||
g = random.randint(2, N - 1)
|
||||
t = k
|
||||
while True:
|
||||
if t % 2 == 0:
|
||||
t = t // 2
|
||||
x = (g ** t) % N
|
||||
|
@ -42,6 +44,9 @@ def rsafactor(d: int, e: int, N: int) -> List[int]:
|
|||
if x > 1 and y > 1:
|
||||
p = y
|
||||
q = N // y
|
||||
break # find the correct factors
|
||||
else:
|
||||
break # t is not divisible by 2, break and choose another g
|
||||
return sorted([p, q])
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user