Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.45 KB | None | 0 0
  1.  
  2. import math
  3. import random
  4. import secrets
  5. from functools import reduce
  6.  
  7.  
  8.  
  9. """def fast_pow_mod(n, a, d):
  10. if d == 0:
  11. return 1
  12. if d % 2 != 0:
  13. return fast_pow_mod(n, a, d - 1) * a % n
  14. else:
  15. a = fast_pow_mod(n, a, int(math.floor(d/2)))
  16. return a * a % n
  17. pass"""""
  18.  
  19.  
  20.  
  21.  
  22. def gen_primes():
  23. max_number = pow(2, 218)
  24. min_number = pow(2, 213)
  25. min_amount_of_primes = 5
  26. primes_range = 128
  27. must_p = 2
  28.  
  29.  
  30. def creating_primes_list():
  31. numbers = []
  32. primes = []
  33. for i in range(2, primes_range + 1):
  34. numbers.append(i)
  35. for p in range(2, primes_range + 1):
  36. if (numbers[p - 2] == p):
  37. primes.append(p)
  38. for i in range(p, primes_range + 1, p):
  39. numbers[i - 2] = 0
  40. return primes
  41.  
  42.  
  43. def get_random_number(max_number, primes, must_p):
  44. powers = [0] * len(primes)
  45. n = must_p
  46. powers[0] += 1
  47. for i in range(min_amount_of_primes - 1):
  48. j = secrets.randbelow(len(primes))-1
  49. n *= primes[j]
  50. powers[j] += 1
  51. while True:
  52. j = secrets.randbelow(len(primes))
  53. n = n * primes[j]
  54. if(n > max_number):
  55. n = n//primes[j]
  56. n += 1
  57. return (powers, n)
  58. else:
  59. powers[j] += 1
  60.  
  61. def check_if_number_is_correct(n, max_number, min_number):
  62. if (n < max_number and n > min_number):
  63. return True
  64. return False
  65.  
  66. def find_A(n, primes, powers):
  67. for a in range(42, math.floor(math.log(n))+1):
  68. might_found = True
  69. if pow(a, n-1, n) != 1:
  70. continue
  71. for i in range(len(primes)):
  72. if powers[i] != 0 and pow(a, int((n - 1) / primes[i]), n) == 1:
  73. might_found = False
  74. break
  75. if might_found == False:
  76. continue
  77. return a
  78.  
  79.  
  80. primes = creating_primes_list()
  81. found = False
  82. while not found:
  83. powers, n = get_random_number(max_number, primes, must_p)
  84. correct = check_if_number_is_correct(n, max_number, min_number)
  85. if not correct:
  86. continue
  87. a = find_A(n, primes, powers)
  88. if (not a):
  89. continue
  90. print(a)
  91. j = 0
  92. for i in primes:
  93. if(powers[j] != 0):
  94. print(i)
  95. j +=1
  96. print(n)
  97. print(pow(a, n-1, n))
  98. return True
  99.  
  100. pass
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. def gen_pseudoprime():
  110. """Генерация псевдопростых на основе теста Миллера—Рабина.
  111.  
  112. Возвращает целое число n в диапазоне от 2^123 до 2^128,
  113. псевдопростое по основание не менее чем log(n) чисел."""
  114. pass
  115.  
  116.  
  117. def rsa_gen_keys():
  118. """Генерация открытого и секретного ключей.
  119.  
  120. Возвращает кортеж (n, p, q, e, d), где
  121. n = p*q;
  122. p, q — сильно псевдопростые по не менее чем log(q) основаниям;
  123. e — целое число, меньшее n и взаимно простое с phi(n), значением функции Эйлера от n,
  124. d — целое число, обратное к e по модулю phi(n)."""
  125. pass
  126.  
  127.  
  128. def rsa_encrypt(n, e, t):
  129. """Шифрование по RSA.
  130.  
  131. На входе открытый ключ n, e и сообщение t.
  132. Возвращает целое число, равное t^e mod n."""
  133. pass
  134.  
  135.  
  136. def rsa_decrypt(n, d, s):
  137. """Дешифрование по RSA.
  138.  
  139. На входе закрытый ключ n, d и зашифрованное сообщение s.
  140. Возвращает целое число, равное s^d mod n."""
  141. pass
  142.  
  143. def prime_factorization_pollard(n, cutoff):
  144. """Разложение на простые по алгоритму Полларда.
  145.  
  146. На входе целое число n (имеющие вид p*q для некоторых простых p, q)
  147. и константа отсечения cutoff ~ log(n).
  148. Возвращает нетривиальный делитель p (или 1, если найти такой не удалось)."""
  149. pass
  150.  
  151.  
  152.  
  153.  
  154. gen_primes()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement