Python RSA加密解密

时间:2019-10-23 14:12:34

标签: encryption rsa

我目前正在研究有关多重加密方法的项目!我在使用RSA时遇到很多麻烦。我有一个加密的代码,可以提供公钥和私钥。现在,我需要让某人编写私钥和加密的文本,并使程序对其进行解密。我尝试了很多次,ando遇到了很多不同的错误,因此我从一开始就删除了解密函数。谁能向我闪耀光芒?怎么办,我该怎么办...真的有任何帮助。

这是代码:

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)

0 个答案:

没有答案