
下载,是个python文件,打开,很明显要写解密脚本

一、加密逻辑先理清楚
这是一个单字符拆双字符查表的加密算法,核心规则:
- 每个明文字符的 ASCII 码,拆成「除以 17 的商
s1」和「除以 17 的余数s2」两部分 - 结合当前字符下标
i,分别计算两个索引,在这里插入代码片去字符表s里取出两个字符 - 每个明文字符加密后变成 2 个密文字符,密文总长度是明文的 2 倍
加密公式:
idx1 = (s1 + i) % 34
idx2 = -(s2 + i + 1) % 34
密文字符对 = s[idx1] + s[idx2]
二、解密思路(反向推导)
解密就是把密文每 2 个字符分成一组,反向算出原始 ASCII 码:
- 找到两个密文字符在
s表里的索引idx1、idx2 - 反向公式还原
s1、s2:s1 = (idx1 - i) % 34s2 = (-idx2 - i - 1) % 34
- 原始 ASCII 码 =
s1 * 17 + s2,转成字符就是明文
写解密脚本:
# 加密用的字符表
s = 'wesyvbniazxchjko1973652048@$+-&*<>'
# 已知的密文(注释里的结果)
cipher = 'v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i'
flag = ""
# 密文每2个字符对应1个明文字符
for i in range(len(cipher) // 2):
# 取出第i组的两个密文字符
c1 = cipher[2 * i]
c2 = cipher[2 * i + 1]
# 找到两个字符在s中的索引
idx1 = s.index(c1)
idx2 = s.index(c2)
# 反向计算 s1 和 s2
s1 = (idx1 - i) % 34
s2 = (-idx2 - i - 1) % 34
# 还原ASCII码,转成字符
plain_ord = s1 * 17 + s2
flag += chr(plain_ord)
print("解密得到的flag:", flag)
运行得到

1万+

被折叠的 条评论
为什么被折叠?



