govno ver2.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import random
  2. def gcd(a, b):
  3. while b != 0:
  4. a, b = b, a % b
  5. return a
  6. def coprime(a, b):
  7. return gcd(a, b) == 1
  8. def primes(N):
  9. primes = []
  10. for target_num in range(2, N):
  11. is_prime = True
  12. for i in range(2, target_num):
  13. if target_num % i == 0:
  14. is_prime = False
  15. if is_prime:
  16. primes.append(target_num)
  17. return primes
  18. list_of_primes = primes(100)
  19. p, q = 0, 0
  20. while p == q:
  21. p = random.choice(list_of_primes)
  22. q = random.choice(list_of_primes)
  23. N = p * q
  24. F = (p - 1) * (q - 1)
  25. while True:
  26. e = random.randint(2, F - 1)
  27. if coprime(e, F):
  28. break
  29. d = 0
  30. while True:
  31. d += 1
  32. if (d * e) % F == 1 and d != e:
  33. break
  34. message = input('Введите сообщение: ')
  35. enc_set = [ord(char) for char in message]
  36. # Шифрование
  37. rsa_enc = [pow(char, e, N) for char in enc_set]
  38. rsa_enc_text = ''.join(chr(char) for char in rsa_enc)
  39. print('Зашифрованное сообщение: ', rsa_enc_text)
  40. # Дешифрование
  41. decryption = [pow(char, d, N) for char in rsa_enc]
  42. decryption_set = ''.join(chr(char) for char in decryption)
  43. print('Расшифрованное сообщение: ', decryption_set)