刷刷之前没打的小比赛,持续学习。
easy_hash
根据encode,在已知$a_1$的情况下直接两次hash可求$a_2,a_3$,那么$a_0$也可以联立secret求出,由于题目的$a_0$正好小于500比特(如果不满足则无法恢复flag),直接转为字节去掉crc校验部分即可。
1 | from Crypto.Util.number import bytes_to_long, long_to_bytes |
LLLCCCGGG
output为连续输出的序列,可构造两组kn求公因子恢复n,进一步求出$a_1,a_2,seed$,下一步就是利用背包格求key,背包格普通对角矩阵类型不能成功(系数很难调):
1 | n = len(m) |
利用提高密度的格来处理会更容易做出来,得到序列为 [1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1],拿到初始的state,构造矩阵快速幂来求最终的state。最后求哈希并异或。
1 | from gmpy2 import * |
easyrsa
分解n用two_squares(n)
,然后再构造整环多项式,以q为基底分解n2,由于flag未pad,而n3的phi是e的倍数,所以应该在模p1的域下解方程。
1 | from sage.all import * |
Matrix
把A和enc都化为 Jordan 标准型,打印可以发现直接就是对角矩阵了,那么由于$a=p^{-1}AP$,有$a^e=p^{-1}A^ep$,所以求矩阵的dlp转化为求logA(A^e),进一步可以转化为求对角线对应位置的元素的dlp。
1 | A= |