Boa noite à todos do fórum. Criei um programa em python que segue a lógica do RSA (gera dois primos grandes, n=multiplicação desses primos, pego um ''e'' tal que mdc(e,phi(n))=1, etc...) .
Quando escolho números pequenos (coloquei n=21,p=3,q=7,phi(n)=12,e=5,d=5 por exemplo) eles pegam normalmente... Contudo, quando começo a gerar os números, não consigo descriptografar! Alguém poderia por favor me ajudar?
segue o código:
import random
from random import getrandbits
def criptografa(m,u,n):
m1=pow(m,u,n)return m1
def euclides_extendido(a, b):
lastremainder, remainder = abs(a), abs(b)
x, lastx, y, lasty =0,1,1,0while remainder:
lastremainder,(quotient, remainder)= remainder, divmod(lastremainder, remainder)
x, lastx = lastx - quotient * x, x
y, lasty = lasty - quotient * y, y
return lastremainder, lastx *(-1if a <0else1), lasty *(-1if b <0else1)def modinv(a, m):
g, x, y = euclides_extendido(a, m)if g !=1:raiseValueErrorreturn x % m
def phi(p,q):
aux =(p -1)*(q -1)return aux
def mdc(num1, num2):
resto =Nonewhile resto isnot0:
resto = num1 % num2
num1 = num2
num2 = resto
return num1
small_primes =[2,3,5,7,11,13,17,19,23,29,31]def miller_rabbin(n, k):if n <2:returnFalsefor p in small_primes:if n < p * p:returnTrueif n % p ==0:returnFalse
r, s =0, n -1while s %2==0:
r +=1
s //=2for _ in range(k):
a = random.randrange(2, n -1)
x = pow(a, s, n)if x ==1or x == n -1:continuefor _ in range(r -1):
x = pow(x,2, n)if x == n -1:breakelse:returnFalsereturnTrue
p = getrandbits (512)
q = getrandbits (512)whilenot(miller_rabbin(p,100)==Trueor miller_rabbin(q,100)==True):
p = getrandbits(512)
q = getrandbits(512)
phi_n=phi(p,q)
n=p*q
e=2whilenot(mdc(e,phi_n)==1):
e = random.randint(2, phi_n)
d=modinv(e,phi_n)
m=55print(m)
m1=criptografa(m,e,n)
m=criptografa(m1,d,n)print(e)print((d*e)%phi_n)print(d)print(n)print(m1)print(m)
Pergunta
Adriel Filipe
Boa noite à todos do fórum. Criei um programa em python que segue a lógica do RSA (gera dois primos grandes, n=multiplicação desses primos, pego um ''e'' tal que mdc(e,phi(n))=1, etc...) .
Quando escolho números pequenos (coloquei n=21,p=3,q=7,phi(n)=12,e=5,d=5 por exemplo) eles pegam normalmente... Contudo, quando começo a gerar os números, não consigo descriptografar! Alguém poderia por favor me ajudar?
segue o código:
Desde já, grato.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.