貌似是个新生赛,但是题出的挺好的,做的几道题只有几个解。
xor
题目:
1 | import os |
加密算法为rn = Ln-1 ,Ln = kn ^ Ln ^ rn;并且会以不同的key连续加密八轮。第一想法是要一轮一轮推导,分别求出八轮密钥。但在推导的过程中发现最后的密钥可以看作一个整体:
r9 = L1 ^ r1 ^ K1
L9 = r1 ^ K2
这里K1,K2都是某几轮密钥的异或值。
那么整个八轮加密就可以看作是第一轮到第九轮结果的一次加密。恢复出K1和K2再对密文求解即可。
1 | import base64 |
rrssaa2
题目:
1 | from Crypto.Util.number import * |
直接给了p,q,e,肯定没有那么简单,发现e和phi不互素,准确来说e是p-1和q-1的因子。这就需要用到amm算法:https://www.anquanke.com/post/id/262634
exp:
1 | #sage脚本 |
大概需要跑2min得到NSSCTF{2he_amm_13_r12lly_hard_f0r_me}
public
题目:
1 | import os |
因为给了hint,所以c乘hint模n方的逆求出:
关键就在这里,g = n+1,那么g的p次方二项展开很多项mod n 都为0了,只剩下p*n+1。那么我们可以求出p,利用p分解n;这里用hint解m的时候发现运算是在modn^2下,但是题目说明了m<n,这样的话解m在modn下计算即可(和n方同余一定和n同余,并且m<n,那么在modn条件下与modn^2等价)。
exp:
1 | from gmpy2 import * |