每周一题-解密
字数 946 2025-08-18 11:37:12
国际密码解密教学文档
题目分析
-
题目描述:
- 创建国际密码,结合了古今中外的密码技术。
- 加密文件为多层Base64编码,最终需解码为flag。
-
关键信息:
- 国际密码、从古至今、合体密码。
- 加密文件通过百度云提供(链接已失效,但解题方法仍适用)。
解题步骤
第一步:Base64多层解码
- 初始文件:文件内容为Base64编码,但解码后仍是Base64,需多次解码。
- 工具推荐:
- 使用在线工具自动多层解码(如:WishingStarMoye)。
- 解码结果:
D3C9BFDAD6D0gD3C9BFDACEB4gB2DDB7F2gD3C9BFDAC8CBgD3C9D6D0C8CBgB7F2D3C9gB2DDCEB4gCDF5CEB4gD3C9D3C9D6D0gCDF5CDF5gB2DDB7F2gD3C9D6D0B4F3
第二步:密文预处理
- 分隔符识别:
- 小写字母
g作为分隔符,将密文分割为多个部分。 - 替换
g为空格后:D3C9BFDAD6D0 D3C9BFDACEB4 B2DDB7F2 D3C9BFDAC8CB D3C9D6D0C8CB B7F2D3C9 B2DDCEB4 CDF5CEB4 D3C9D3C9D6D0 CDF5CDF5 B2DDB7F2 D3C9D6D0B4F3
- 小写字母
- 编码类型判断:
- 根据“国际密码”提示,尝试GB2312编码。
- 每组4字符(如
D3C9)对应GB2312编码的汉字。
第三步:GB2312编码解码
- 工具推荐:
- 使用在线GB2312编码表(如:QQXiuzi)。
- 解码示例:
D3C9→ “王”BFDA→ “夫”D6D0→ “大”- (注:需手动查询每组4字符对应的汉字)。
第四步:当铺密码转换
- 当铺密码规则:
- 汉字笔画的“出头数”即为对应数字(如“王”有6个出头,对应6)。
- 转换表参考:
汉字 出头数 数字 王 6 6 夫 4 4 大 3 3 (需根据实际解码汉字补充) - 数字序列生成:
- 例如:
王夫大→6 4 3。
- 例如:
第五步:ASCII码转换
- 数字分组:
- 将数字按分隔符
g分组,每组为十进制ASCII码。 - 示例:
102,108,97,103,123,71,98,68,112,66,97,125。
- 将数字按分隔符
- 转换结果:
- 使用Python脚本或在线工具转换为字符:
numbers = [102, 108, 97, 103, 123, 71, 98, 68, 112, 66, 97, 125] flag = ''.join(chr(n) for n in numbers) print(flag) # 输出:flag{GbDpBa}
- 使用Python脚本或在线工具转换为字符:
自动化脚本
# 读取密文文件(dan.txt内容需以g结尾)
f = open('dan.txt', 'r')
dan = f.read()
listmsg = []
while True:
listmsg.append(':')
list = ''
if dan.find('g') < 0:
break
list = dan[:dan.find('g')]
dan = dan[dan.find('g')+1:]
for i in range(len(list)//4):
che = list[i*4:(i+1)*4]
if che == 'BFDA':
listmsg.append('0')
elif che == 'D3C9':
listmsg.append('1')
elif che == 'D6D0':
listmsg.append('2')
elif che == 'C8CB':
listmsg.append('3')
elif che == 'B4F3':
listmsg.append('5')
elif che == 'CDF5':
listmsg.append('6')
elif che == 'B7F2':
listmsg.append('7')
elif che == 'CEB4':
listmsg.append('8')
elif che == 'B2DD':
listmsg.append('9')
# 转换为ASCII字符
asc = ''
msg = ''
for x in range(1, len(listmsg)):
if listmsg[x] != ':':
asc += listmsg[x]
else:
msg += chr(int(asc))
asc = ''
print(msg)
关键点总结
- 多层Base64解码:需重复解码至出现非Base64内容。
- GB2312编码:每组4字符对应一个汉字。
- 当铺密码:汉字出头数→数字。
- ASCII转换:十进制数字转为字符。
最终Flag
flag{GbDpBa}(根据实际解码结果可能不同)