随机数之旅 3
本题考查线性代数。
FLAG 的每个字符取其 ASCII 码得到明文向量
根据题目关系有:
根据线代知识,这是欠定方程,它的解构成一个解空间:
其中
用 Sage 写就是:
python
A=matrix(Zmod(p),A)
b=vector(b)
xp=A.solve_right(b) #特解
ArK=A.right_kernel().basis() # .basis()返回一个向量空间的基(组),
v0=ArK[0] #右核的第一个基可以通过 rank() 函数查看矩阵的秩。容易得到
方程解有多个,但 FLAG 只有一个。注意到 FLAG 中有 6 个字符已知,可以任选一个已知字符计算参数:
python
t=(ord("l")-xp[1])*pow(v0[1],-1,p)%p
x=xp+t*v0
mes=list(x)
FLAG="".join(chr(mes[i]) for i in range(42))
print(FLAG)