defmain(): # 生成一个512位的大素数p p = getPrime(512) # 通过从p开始连续计算114514个下一个素数得到q q = int(reduce(lambda res, _: next_prime(res), range(114514), p)) #可以用nextprime # 计算n,即p和q的乘积,这是RSA算法中的模数 n = p * q # 选择公钥指数e,这里使用常见的65537 e = 65537
# 将flag转换为长整型 m = bytes_to_long(flag)
# 使用RSA加密:计算c = m^e mod n c = pow(m, e, n)
# 打印输出n和c print(f'{n = }') print(f'{c = }')
if __name__ == '__main__': main()
""" n = 96742777571959902478849172116992100058097986518388851527052638944778038830381328778848540098201307724752598903628039482354215330671373992156290837979842156381411957754907190292238010742130674404082688791216045656050228686469536688900043735264177699512562466087275808541376525564145453954694429605944189276397 c = 17445962474813629559693587749061112782648120738023354591681532173123918523200368390246892643206880043853188835375836941118739796280111891950421612990713883817902247767311707918305107969264361136058458670735307702064189010952773013588328843994478490621886896074511809007736368751211179727573924125553940385967 """
""" n = 83917281059209836833837824007690691544699901753577294450739161840987816051781770716778159151802639720854808886223999296102766845876403271538287419091422744267873129896312388567406645946985868002735024896571899580581985438021613509956651683237014111116217116870686535030557076307205101926450610365611263289149 c = 69694813399964784535448926320621517155870332267827466101049186858004350675634768405333171732816667487889978017750378262941788713673371418944090831542155613846263236805141090585331932145339718055875857157018510852176248031272419248573911998354239587587157830782446559008393076144761176799690034691298870022190 hint = 5491796378615699391870545352353909903258578093592392113819670099563278086635523482350754035015775218028095468852040957207028066409846581454987397954900268152836625448524886929236711403732984563866312512753483333102094024510204387673875968726154625598491190530093961973354413317757182213887911644502704780304 """
from Crypto.Util.number import long_to_bytes import gmpy2
n = 83917281059209836833837824007690691544699901753577294450739161840987816051781770716778159151802639720854808886223999296102766845876403271538287419091422744267873129896312388567406645946985868002735024896571899580581985438021613509956651683237014111116217116870686535030557076307205101926450610365611263289149 c = 69694813399964784535448926320621517155870332267827466101049186858004350675634768405333171732816667487889978017750378262941788713673371418944090831542155613846263236805141090585331932145339718055875857157018510852176248031272419248573911998354239587587157830782446559008393076144761176799690034691298870022190 hint = 5491796378615699391870545352353909903258578093592392113819670099563278086635523482350754035015775218028095468852040957207028066409846581454987397954900268152836625448524886929236711403732984563866312512753483333102094024510204387673875968726154625598491190530093961973354413317757182213887911644502704780304 e = 65537
# 找 k for k inrange(1, 10): val = hint + k * n root, exact = gmpy2.iroot(val, 2) if exact: S = int(root) print(f"k = {k}, S = {S}") break
# 求 p, q D2 = S*S - 4*n D, exact = gmpy2.iroot(D2, 2) if exact: D = int(D) p = (S + D) // 2 q = (S - D) // 2 assert p * q == n print("p =", p) print("q =", q)
解得:k = 4, S = 18470541968644424341853360787392124964912376035057025304283994397475806910690870232956788598297125214076864380379470271723684322545326168920856938288029630
p = 10407000088959425169419203940606545581520363832679548727898058943637902824586736063534210492690389402499379844542729949917492266301734929472912145381387041