强网杯not only rsa
想了一下午这道题,还是没做出来,赛后复现才逐渐明白了
我的思路
先贴上数据
n = 6249734963373034215610144758924910630356277447014258270888329547267471837899275103421406467763122499270790512099702898939814547982931674247240623063334781529511973585977522269522704997379194673181703247780179146749499072297334876619475914747479522310651303344623434565831770309615574478274456549054332451773452773119453059618433160299319070430295124113199473337940505806777950838270849 e = 641747 c = 730024611795626517480532940587152891926416120514706825368440230330259913837764632826884065065554839415540061752397144140563698277864414584568812699048873820551131185796851863064509294123861487954267708318027370912496252338232193619491860340395824180108335802813022066531232025997349683725357024257420090981323217296019482516072036780365510855555146547481407283231721904830868033930943
n不是可以开五次方吗,然后我去算c模p之后的值,然后在对其强行开e次方,之后再用高次同余式的算法算出m的值,我最初是从网上找的脚本,非常快,但是我忽略了一个事实,那就是最后开出了有很多值,但那个脚本只打印了一个值,然后之后我拿这个值算出了m的值,然后我就在纠结为啥没有flag,之后看看大佬们的wp我才明白了
正确思路
正确思路其实很简单粗暴,就是直接开e次方,然后枚举找到flag
脚本如下
n = 6249734963373034215610144758924910630356277447014258270888329547267471837899275103421406467763122499270790512099702898939814547982931674247240623063334781529511973585977522269522704997379194673181703247780179146749499072297334876619475914747479522310651303344623434565831770309615574478274456549054332451773452773119453059618433160299319070430295124113199473337940505806777950838270849 e = 641747 c = 730024611795626517480532940587152891926416120514706825368440230330259913837764632826884065065554839415540061752397144140563698277864414584568812699048873820551131185796851863064509294123861487954267708318027370912496252338232193619491860340395824180108335802813022066531232025997349683725357024257420090981323217296019482516072036780365510855555146547481407283231721904830868033930943 res = mod(c, n).nth_root(e, all = true) #all = true表示列出所有解 for re in res: f = long_to_bytes(int(re)) if b'flag' in f: print(f)
这种方法虽然有点慢,但是有现成的函数用,对萌新很友好。还有另一种amm算法,可以上这看看宸极实验室—『CTF』AMM 算法详解与应用 - 知乎 (zhihu.com)

浙公网安备 33010602011771号