govnocode.py 1.3 KB

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