0%

相邻素数

2024-02-16 05:52By
miduoliya
CRYPTO

Problem: 相邻素数

[[toc]]

思路

  • 此题解题的关键在于求出p,q,n又过于大且所分解出的两个素数相差不是很大,通过取n开方后的不精确偏移值来穷是否为完全平方数,举出正确的p,q

EXP

  • import libnum, gmpy2

def factor(n):

a = gmpy2.iroot(n, 2)[0] while True: num = pow(a, 2) - n if gmpy2.is_square(num): b = gmpy2.iroot(num, 2)[0] p = a + b q = a - b return p, q a += 1

n = 115637000420176820831322601039129424406844427046456738651883381559357542765613732363445112111006849040385859313572091386802534464534403117787314180179562651607533039692795522388596550968316951090748054495960090527479954143448774136390568881020918710834542819900918984139672802889774720153267841255456602500057
e = 65537
c = 98161406745910866780822530171878255235776133393411573803496865047700715941955255328757920065032397556905095591171977170479344602512244671081108703687450560269408412671849929423399172588599903975793985819498354819305128607934552101433664794909855378636055525016664559476808490723554481335856183927702549281730
p, q = factor(n)
i = (p - 1) * (q - 1)
d = pow(e, -1, i)
m = pow(c, d, n)
print(libnum.n2s(int(m)).decode())

总结

  • 通过找到偏移后n的开方值,推出p和q
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论