12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import random
- from random import randint
- 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 = primes(100)
- p, q = 0, 0
- while p == q:
- p = random.choice(list)
- q = random.choice(list)
- N = p * q
- F = (p - 1)*(q - 1)
- while True:
- e = 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 = []
- for i in Message:
- enc_Set.append(ord(i))
- # Шифрование
- rsa_enc = []
- rsa_enc_text = []
- for i in enc_Set:
- rsa_enc.append((i**e)%N)
- for i in rsa_enc:
- rsa_enc_text.append(chr(i))
- print('Зашифрованное сообщение: ', "".join(rsa_enc_text))
- # Дешифрование
- decryption = []
- for i in rsa_enc:
- decryption.append((i**d)%N)
- decryption_Set = []
- for i in decryption:
- decryption_Set.append(chr(i))
- print('Расшифрованное сообщение: ', "".join(decryption_Set))
|