RSA解密 - CTF试题解析
"from Crypto.Util.number import *\nfrom gmpy2 import \nfrom secret import flag\n\nBITS = 233\n\ndef broken(x, bits):\n    return x>>bits\n\ndef gen():\n    p,q = getPrime(512),getPrime(512)\n    n = pq\n    e = 65537\n    return n, broken(p+q, BITS)\n\nn, hint = gen()\n\ne = 0x10001\nm = bytes_to_long(flag)\nassert m < n\nc = pow(m, e, n)\n\nprint(n)\nprint(hint)\nprint(c)\n\n'''\n107847645025513535850791225440130707186374273414737521825714442885442542984529827092766916748308266623066053421754530398675086374798530909982183476265477598220972320436343536618913608933549054793948336438240303192183575843300257235195070331758555882832698815894168120103459360566404203412796086643598204242029\n1505246122706281178983443268987790509406564031452059494152554645294649335244676839890\n16589212605025468264862689939961340646400626438824064459026078002373801735937861932598660491280834517490394340315480853421268981930217857435669572426110105938015092688880859031418213297139875807487434491329423279700179082306961439610731922669459168752958192842026918421354512654494583087220572962719510130677\n'''\n以上代码源于一个CTF试题,我该如何得到其中的flag呢\n并且请你给出你所认为正确的最终结果,我需要的是这道题目中所蕴含的flag,请给出最终结果内容:根据题目提供的代码,我们可以看到以下信息:\n\n- 给定的 n 是一个大整数,用于RSA加密。\n- 给定的 hint 是通过将 p + q 的最低 233 位(即 BITS)截断得到的。\n- 给定的 c 是通过将明文 m 使用公钥 e 和模数 n 进行RSA加密得到的。\n\n我们需要根据这些信息还原出 p 和 q,然后使用私钥解密 c 得到明文 m,即题目所蕴含的 flag。\n\n由于 hint 是通过截断 p + q 的最低 233 位得到的,我们可以尝试通过枚举 x 的值来恢复 p 和 q 的可能范围。然后,我们可以计算 p + q 的值,并使用 hint 与 p + q 进行比较,从而确定 p 和 q 的具体值。\n\n下面是实现这个过程的代码:\n
原文地址: https://www.cveoy.top/t/topic/poor 著作权归作者所有。请勿转载和采集!