1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| from Crypto.Util.number import * from sympy import symbols, Eq, solve from gmpy2 import * import random import math a=15264966144147258587171776703005926730518438603688487721465 b=76513250180666948190254989703768338299723386154619468700730085586057638716434556720233473454400881002065319569292923 c=125440939526343949494022113552414275560444252378483072729156599143746741258532431664938677330319449789665352104352620658550544887807433866999963624320909981994018431526620619
p, q, r= symbols('p q r') equation1 = Eq(p+q+r, a) equation2 = Eq(p*q+p*r+q*r, b) equation3 = Eq(p*q*r,c) solutions = solve((equation1, equation2,equation3), (p, q,r)) p,q,r=solutions[0] p,q,r=int(p),int(q),int(r)
c=24884251313604275189259571459005374365204772270250725590014651519125317134307160341658199551661333326703566996431067426138627332156507267671028553934664652787411834581708944 n=p*q*r e=2 def onemod(e, q): p = random.randint(1, q-1) while(powmod(p, (q-1)//e, q) == 1): p = random.randint(1, q) return p
def AMM_rth(o, r, q): assert((q-1) % r == 0) p = onemod(r, q)
t = 0 s = q-1 while(s % r == 0): s = s//r t += 1 k = 1 while((s*k+1) % r != 0): k += 1 alp = (s*k+1)//r
a = powmod(p, r**(t-1)*s, q) b = powmod(o, r*a-1, q) c = powmod(p, s, q) h = 1
for i in range(1, t-1): d = powmod(int(b), r**(t-1-i), q) if d == 1: j = 0 else: j = (-math.log(d, a)) % r b = (b*(c**(r*j))) % q h = (h*c**j) % q c = (c*r) % q result = (powmod(o, alp, q)*h) return result
def ALL_Solution(m, q, rt, cq, e): mp = [] for pr in rt: r = (pr*m) % q mp.append(r) return mp
def ALL_ROOT2(r, q): li = set() while(len(li) < r): p = powmod(random.randint(1, q-1), (q-1)//r, q) li.add(p) return li
cp = c % p cq = c % q cr = c % r
mp = AMM_rth(cp, e, p) mq = AMM_rth(cq, e, q) mr = AMM_rth(cr, e, r)
rt1 = ALL_ROOT2(e, p) rt2 = ALL_ROOT2(e, q) rt3 = ALL_ROOT2(e, r)
amp = ALL_Solution(mp, p, rt1, cp, e) amq = ALL_Solution(mq, q, rt2, cq, e) amr = ALL_Solution(mr, r, rt3, cr, e) for x in amp: for y in amq: for z in amr: print(long_to_bytes(int(CRT([x,y,z],[p,q,r]))))
PYTHON
|