Advertisement
evgeniya_polyntseva

kripta2

Nov 10th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. import random
  2. import codecs
  3. import math
  4. import sys
  5.  
  6. def prime(n): # Проверка на простое число
  7. d = 2
  8. while d ** 2 <= n and n % d != 0:
  9. d += 1
  10. if d ** 2 > n:
  11. return True
  12. else:
  13. return False
  14.  
  15. def mutprime(num1, num2): # Проверка на взаимнопростые числа
  16. if math.gcd(num1, num2) == 1:
  17. return True
  18. return False
  19.  
  20. def fact(eu): # Факторизация
  21. i = 2
  22. f = []
  23. while prime(eu) == False:
  24. if eu % i == 0 and prime(i) == True:
  25. eu = eu / i
  26. if i not in f:
  27. f.append(i)
  28. else:
  29. i += 1
  30. f.append(eu)
  31. return f
  32.  
  33. def fastpush(g, b, p): # Быстрое возведение в степень
  34. if b == 0:
  35. return 1
  36. if b % 2 == 1:
  37. return (g * fastpush(g, b - 1, p)) % p
  38. d = fastpush(g, b/2, p)
  39. return (d ** 2) % p
  40.  
  41. def primeroot(p1, g1): # Проверка на первообразный корень по модулю
  42. if mutprime(p1, g1) == True:
  43. euler = p - 1
  44. count = 0
  45. f = fact(euler)
  46. print(f)
  47. #г в степени п-1 делить на каждый из простых множителей числа п-1 и по модулю п
  48. for i in range(len(f)):
  49. if fastpush(g1, euler / f[i], p1) != 1:
  50. count += 1
  51. else:
  52. return False
  53. if count == len(f):
  54. return True
  55. return False
  56.  
  57. print("enter p")
  58. p = int(input())
  59. if prime(p) == False:
  60. print("p isn't prime number")
  61. sys.exit()
  62.  
  63. print("enter g")
  64. g = int(input())
  65. if primeroot(p, g) == False:
  66. print("g isn't prime root")
  67. else:
  68. a = random.randint(1, p - 1)
  69. print("random number а = ", a)
  70. public_key = g ** a % p
  71. print("public key А = ", public_key)
  72. file = codecs.open('1.txt', 'r', 'utf-8')
  73. b = int(file.read(2))
  74. private_key = b ** a % p
  75. print("private key B = ", private_key)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement