Jump to content
Adriel Filipe

criptografia RSA

Recommended Posts

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, 0
    while remainder:
        lastremainder, (quotient, remainder) = remainder, divmod(lastremainder, remainder)
        x, lastx = lastx - quotient * x, x
        y, lasty = lasty - quotient * y, y
    return lastremainder, lastx * (-1 if a < 0 else 1), lasty * (-1 if b < 0 else 1)

def modinv(a, m):
    g, x, y = euclides_extendido(a, m)
    if g != 1:
        raise ValueError
    return x % m
def phi(p,q):
    aux = (p - 1) * (q - 1)
    return aux
def mdc(num1, num2):
    resto = None
    while resto is not 0:
        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: return False
    for p in small_primes:
        if n < p * p: return True
        if n % p == 0: return False
    r, s = 0, n - 1
    while s % 2 == 0:
        r += 1
        s //= 2
    for _ in range(k):
        a = random.randrange(2, n - 1)
        x = pow(a, s, n)
        if x == 1 or x == n - 1:
            continue
        for _ in range(r - 1):
            x = pow(x, 2, n)
            if x == n - 1:
                break
        else:
            return False
    return True

p = getrandbits ( 512 )
q = getrandbits ( 512 )
while not (miller_rabbin(p,100)==True or miller_rabbin(q,100)==True):
    p = getrandbits(512)
    q = getrandbits(512)
phi_n=phi(p,q)
n=p*q
e=2
while not (mdc(e,phi_n)==1):
    e = random.randint(2, phi_n)
d=modinv(e,phi_n)
m=55
print(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)

Desde já, grato.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Almeidareii
      Bom, tenho 3 enigmas para descobrir porém não estou conseguindo, se puderem me dar uma  ajuda, com alguma dica ou com a propria rsp kk
      Encontrar algum padrao, alguma coisa ja ajuda, obrigado a todos.
      obs eles podem estar interligados
       
      1)
      139 28 49 19 189 11 5 18
      156 66 49 19 95 10 
      214 9 
      19 5 88 15 45 29
      101 11 156 66
      129 10 19 5 88 15
      101 11 19 5 45 29
      129 10
      214 9
      45 29 139 26
      156 66 19 5 95 10
      43 63 136 21 5 18
      214 9
      156 66 5 18
      189 11 88 15 156 66 49 19
      95 10 19 5 139 28
      101 11 5 18 129 10
      139 28 49 19 189 11 5 18
      101 11 19 5 45 29
      19 5 88 15 45 29
      189 11 88 15 156 66 49 19
      156 66 19 5 95 10
      95 10 19 5 139 28
      101 11 156 66
      88 15 139 26 38 26
      95 10 139 26 189 11
      139 28 5 18 156 66 5 18
      156 66 19 5 95 10
      19 5 88 15 45 29
      101 11 156 66
      214 9
      43 63 136 21 5 18
      139 28 49 19 189 11 5 18
      19 5 88 15 45 29
      129 10 19 5 88 15
      19 5 49 19 129 10
      19 5 88 15 45 29
      101 11 5 18 129 10
      139 28
      101 11 5 18 129 10
      129 10 19 5 88 15
      129 10
      19 5 88 15 45 29
      156 66 189 11 45 29
      101 11 5 18 129 10
      101 11 19 5 45 29
      43 63
      101 11 156 66
      129 10
      101 11 19 5 45 29
      214 9
      156 66 5 18
      139 28 49 19 189 11 5 18
      19 5 88 15 45 29
       
      2) 
      Imf%dmstpv"|jtwp1"Jv(oiw#fppvmn{o!uk'yknxwcu1'Lsc"nwpvv!jmkmdlo0
      E!fgsfggj-"wunhj#ptt(ptprv!fhth&k!lozyk'tzg#d'hnq0!C'wsuoqf$wh}0
       
      3)  Uma imagem com varios números em japones que traduzidos davam nisso (j? é por que tinha um j e eu não sei o seu valor):
      10 5 1 10 9 8 10 6 6 10 7 10 1 10 9 2 10 4 3 10 4 10 9 5 10 5 10 3 10 5 10 7 10 10 9 100 2 10 1 7 10 4 10 7 7 10 9 3 10 3 9 10 2 2 10 6 4 8 10 9 6 8 3 10 10 9 5 10 4 10 2 4 10 5 10 9 6 10 9 6 2 10 1 10 9 10 2 5 4 10 3 10 9 4 10 7 2 10 9 10 1 10 2 10 7 10 8 10 7 2 10 5 10 9 9 10 10 9 4 10 10 10 7 10 4 10 6 2 10 2 10 5 10 9 7 10 10 7 2 10 4 10 7 10 7 10 3 5 10 9 7 10 9 10 6 10 6 j? 10 9 6 10 2 10 7 2 10 8 10 9 9 10 6 10 9 4 10 4 10 7 2 10 4 10 9 6  10 4 j? 10 3 100 10 3 10 2
    • By Motta
      Após vazamento de supostos diálogos de Moro, Bolsonaro e integrantes do Executivo usarão celulares criptografados da Abin
    • By Motta
      Lei aprovada na Austrália ameaça a criptografia em todo o mundo
    • By Martinxx
      Então eu tenho uma questão , eu fiz um sistema de cadastro ( copiei ) e eu gostaria de saber se tem como eu criptografar as senhas no Banco de dados mas a senha fica normal tipo :
      eu registro = 123456
      e no banco de dados está = dfgsdafgsdhoolldgfskhsjfgk
      mas na hora de logar logar usando = 123456
      quero saber estou desenvolvendo um projeto e preciso disso!
    • By Renan Miller
      Bom dia pessoal, desenvolvi um pequeno sistema que esta rodando em localhost.
      Minha duvida é: É possível criptografar meu código e manter o funcionamento do sistema normalmente?
      Por exemplo, o sistema funciona normalmente porem quando abrir o arquivo cadastrar.php o mesmo esteja cifrado.
       
      Muito obrigado! 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.