RSA python3 - вывод дешифрования не эквивалентен сообщению - PullRequest
0 голосов
/ 01 мая 2020

Я пытался создать базовый c код шифрования / дешифрования для входного сообщения (которое является числом). Однако мой код расшифровки не производит сообщение. Значение e было выбрано равным 19 (его маленькое b c является доказательством концепции), и два простых числа, которые умножаются для получения n, равны 41 и 29. Мне удалось найти d равным 59 с помощью обратного кода мода. Я нашел в Интернете. Что может быть не так?

# encryption function
def encrypt(msg):
    encryption = (msg ** e) % n
    return encryption

# decryption function
def decrypt(encrypt):
    decryption = (encrypt ** d) % n
    return decryption

(кстати, n - это модуль, e - это часть ключа publi c, а d - это часть закрытого ключа)

1 Ответ

0 голосов
/ 01 мая 2020

Ваш код не очень понятен, потому что я не знаю, откуда и как вы получаете значения e, d и n. Попробуйте эту базовую c реализацию алгоритма RSA в криптографии.

from decimal import Decimal 

def gcd(a,b): 
    if b==0: 
        return a 
    else: 
        return gcd(b,a%b) 
p = int(input('Enter the value of p = ')) 
q = int(input('Enter the value of q = ')) 
no = int(input('Enter the value of text = ')) 
n = p*q 
t = (p-1)*(q-1) 

for e in range(2,t): 
    if gcd(e,t)== 1: 
        break


for i in range(1,10): 
    x = 1 + i*t 
    if x % e == 0: 
        d = int(x/e) 
        break
ctt = Decimal(0) 
ctt =pow(no,e) 
ct = ctt % n 

dtt = Decimal(0) 
dtt = pow(ct,d) 
dt = dtt % n 

print('n = '+str(n)+' e = '+str(e)+' t = '+str(t)+' d = '+str(d)+' cipher text = '+str(ct)+' decrypted text = '+str(dt)) 
...