传统知识+古典密码
题目信息
首先考虑 辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。对应的是什么。在干支里它们分别对应
28 30 23 8 17 10 16 30
而且在最后有“+甲子”。“甲子”对应的是60,所以每个数都需要加上60,也就是
88 90 83 68 77 70 76 90
对应的ASCII的值为
XZSDMFLZ
栅栏密码为2 凯撒密码为5 对应解密就可以得到flag中的值
关于栅栏密码
栅栏密码(Rail Fence Cipher)是一种比较简单的置换密码,它的加解密原理是:. 加密时,将要加密的明文按照一定的规则在栅栏之间上下交错书写。
比如hello!按照2栏进行加密是:
h l o
e l !
加密的结果是按行输出:hloel!
对应的解密过程呢?当然是也是将其按照行排列好,然后按列输出就可以了
h l o
e l !
解密结果:hello!
所谓的几栏栅栏加密,就是在加密的时候选择的行数不同
变异凯撒
题目信息
观察a→f需要移动5位,f→l需要移动6位,以此类推
解密脚本如下:
#变异凯撒解密脚本
def Cesear(encrypt_str):
descrypt_str = ''
step = 5 #初始化步数为5
for i in range(len(encrypt_str)):
c = ord(encrypt_str[i])
if 65<=c<=90:
c+=step #加减取决于是后移还是移
elif 97<=c<=120:
c+=step
else:#这里为了方便理清逻辑所以多此一举用了三个判断条件 其实只需要使用c+=step就可以解题了
c+=step
step+=1#步数自增
if step>26:
step = step%26
descrypt_str+=chr(c)
return descrypt_str
encrypt_str="afZ_r9VYfScOeO_UL^RWUc"
decrypt_str = Cesear(encrypt_str)
print(decrypt_str)
关于Rabbit
特点:Rabbit加密开头部分通常为U2FsdGVkX1(AES、DES、RC4、Rabbit、Triple DES、3DES 这些算法都可以引入密钥,密文特征与Base64类似,明显区别是秘文里+比较多,并且经常有/)
RSA ROLL
题目信息
根据题目已经知道n、e 使用在线分解网站分解得到p和q
分解网站:factordb.com
既然已经得到了e,p,q那么就能够得到d
得到d之后使用pow(c,d,n)就能得到密文,那么什么是c呢?c就是下面的一组数据,可以使用数组进行暂存;对每个c进行解密后存到一个数组元素里,然后再输出,解密脚本如下:
import gmpy2
def rsa():
p = 18443
q = 49891
n = p*q
e = 19
d = gmpy2.invert(e,(p-1)*(q-1))
c = [704796792,752211152,274704164,18414022,368270835,483295235,263072905,459788476,483295235,459788476,663551792,475206804,459788476,428313374,475206804,459788476,425392137,704796792,458265677,341524652,483295235,534149509,425392137,428313374,425392137,341524652,458265677,263072905,483295235,828509797,341524652,425392137,475206804,428313374,483295235,475206804,459788476,306220148]
m = []
for i in c:
m.append(pow(i,d,n))
for i in m:
print(chr(i))
print(rsa())