Расшифровка шифрования Python RSA - PullRequest
0 голосов
/ 23 октября 2019

Я сейчас работаю над проектом о методе множественного шифрования! У меня много проблем с RSA. У меня есть код, который шифрует, дает открытый и закрытый ключ. Теперь мне нужно позволить кому-то написать закрытый ключ и зашифрованный текст и заставить программу расшифровывать его. Я пытался много раз, и у меня было так много разных ошибок, что я удалил функцию расшифровки, чтобы сделать это с самого начала. Кто-нибудь может пролить свет на меня? Как сделать, что мне делать ... Любая помощь, действительно.

Это код:

import random


def totient(number): 
    if(prime(number)):
        return number-1
    else:
        return False



def prime(n): 
    if (n <= 1):
        return False
    if (n <= 3):
        return True

    if (n%2 == 0 or n%3 == 0):
        return False

    i = 5
    while(i * i <= n):
        if (n%i == 0 or n%(i+2) == 0):
           return False
        i+=6
    return True



def generate_E(num): 
    def mdc(n1,n2):
        rest = 1
        while(n2 != 0):
            rest = n1%n2
            n1 = n2
            n2 = rest
        return n1

    while True:
        e = random.randrange(2,num) 
        if(mdc(num,e) == 1):
            return e


def generate_prime(): 
    while True: 
        x=random.randrange(1,100) 
        if(prime(x)==True):
            return x

def mod(a,b): 
    if(a<b):
        return a
    else:
        c=a%b
        return c


def cipher(words,e,n): 
    tam = len(words)
    i = 0
    lista = []
    while(i < tam):
        letter = words[i]
        k = ord(letter)
        k = k**e
        d = mod(k,n)
        lista.append(d)
        i += 1
    return lista



def calculate_private_key(toti,e):
    d = 0
    while(mod(d*e,toti)!=1):
        d += 1
    return d




## MAIN
if __name__=='__main__':
    text = input("Insert message: ")
    p = generate_prime() # generates random P
    q = generate_prime() # generates random Q
    n = p*q # compute N
    y = totient(p) # compute the totient of P
    x = totient(q) # compute the totient of Q
    totient_de_N = x*y # compute the totient of N
    e = generate_E(totient_de_N) # generate E
    public_key = (n, e)

    print('Your public key:', public_key)
    text_cipher = cipher(text,e,n)
    print('Your encrypted message:', text_cipher)
    d = calculate_private_key(totient_de_N,e)
    print('Your private key is:', d)
...