\(2n=a_0^2+a_1^2+e(b_0^2+b_1^2)\)
\(n=a_0^2+eb_0^2\)
\(n=a_1^2+eb_1^2\)
\(nb_1^2=a_0^2b_1^2+eb_0^2b_1^2\)
\(nb_0^2=a_1^2b_0^2+eb_1^2b_0^2\)
\((b_1-b_0)(b_1+b_0)n=(a_0b_1-a_1b_0)(a_0b_1+a_1b_0)\)
离散对数正常算算不出来,考虑\(p-1\)光滑的情况,分解\(p-1\)后发现有很多小素数和一个\(39\)位的大素数\(p_0\)。flag长度只有\(55\)位,所以可以把大素数扔掉,用小素数跑\(pohlig-hellman\) 。\(p\)的原根是\(5\),先求\(a=dlp(5,enc,p),b=dlp(2,enc,p)\)然后\(exgcd\)搞一搞,或者\(\frac{p-1}{p_0}+1\)的原根刚好是\(2\),可以直接跑
充分发挥搜索引擎的功能,找到脚本 https://lazzzaro.github.io/2020/05/07/crypto-离散对数/index.html 魔改一下处理