1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import random
- def gcd(a, b):
- while b != 0:
- a, b = b, a % b
- return a
- def coprime(a, b):
- return gcd(a, b) == 1
- def primes(N):
- primes = []
- for target_num in range(2, N):
- is_prime = True
- for i in range(2, target_num):
- if target_num % i == 0:
- is_prime = False
- if is_prime:
- primes.append(target_num)
- return primes
- list_of_primes = primes(100)
- p, q = 0, 0
- while p == q:
- p = random.choice(list_of_primes)
- q = random.choice(list_of_primes)
- N = p * q
- F = (p - 1) * (q - 1)
- while True:
- e = random.randint(2, F - 1)
- if coprime(e, F):
- break
- d = 0
- while True:
- d += 1
- if (d * e) % F == 1 and d != e:
- break
- message = input('Введите сообщение: ')
- enc_set = [ord(char) for char in message]
- # Шифрование
- rsa_enc = [pow(char, e, N) for char in enc_set]
- rsa_enc_text = ''.join(chr(char) for char in rsa_enc)
- print('Зашифрованное сообщение: ', rsa_enc_text)
- # Дешифрование
- decryption = [pow(char, d, N) for char in rsa_enc]
- decryption_set = ''.join(chr(char) for char in decryption)
- print('Расшифрованное сообщение: ', decryption_set)
|