2022祥云杯wp-crypto
little little fermat
题目源码
1 |
|
题目分析
根据题目名字来看,此题和费马小定理的使用有关,题目中有一个obfuscate
函数,进行了对q的生成,q=p+A
,这里可以看一下A的范围,是在2[18,319]之间,因此p、q接近,尝试一下yafu分解。
题目对m先进行了处理,再进行RSA加密,因此我们需要知道x。assert 114514 ** x % p == 1
运用费马小定理,若114514与p互素,则x=p-1,即可求解m。
EXP
1 |
|
fill
题目源码
1 |
|
题目分析
随机产生32位的数,sha256()加密后作为flag,并将其2进制的每一位存到了f_list
数组中。
又
创建了一个r_list
32位数组,里面存着随机数,先暂时不管。
双
对r_list
数组中的随机数做了加密,产生了M
数组。
对f_list
和M
数组进行了numpy.dot
运算,即向量乘法,得到和为S。
叒
创建了一个s
数组,这个很明显,用LCG线性同余算法进行了加密。
最后将M
数组与s
数组相加。
这就是这道题整体的流程,每一步并不难,只是步骤多,略显复杂。
EXP
0x01
可以先进行一下LCG的求解,把s数组求解出来,从而求出M数组。
1 |
|
0x02
按理来说,感觉应该根据求出来的M
数组进行逆运算,求出r_list
数组,但是求出来r_list
有什么用呢,所以直接尝试求f_list
。因为f_list
中不是0就是1,与M
做向量乘法,即为M
数组中若干元素的和。根据题目给定和S,先大概看一下需要M
中多少个元素累加。发现在M前21位和
< S,前22位和 >
S,所以猜想应该是M当中,除10个左右元素之外的和。
这里就遍历了一下,复杂度实在太高了,也没想着能出,结果还真算出来了o.O
1 |
|
也就说明,f_list
中下标为这些的,对应值是0,其余为1,即可得到msg的2进制数,转为十进制后进行sha256()
加密即可。
1 |
|
2022祥云杯wp-crypto
https://sch01ar.github.io/2022/10/30/2022-10-30-2022祥云杯wp-crypto/