2026.7.19(3)【栅栏密码】传统知识+古典密码

📌 题目信息

项目 内容
题目名称 传统知识+古典密码
题目来源 BUUCTF Crypto
题目类型 密码学
子分类 古典密码 + 编码
考点 六十甲子(天干地支)、ASCII码、栅栏密码、凯撒密码
难度 ⭐
最终 Flag flag{SHUANGYU}

🛠️ 使用工具

  • 六十甲子对照表(天干地支顺序)
  • ASCII码表
  • 栅栏密码解密工具
  • 凯撒密码解密工具

📝 解题思路

题目名称中的 "传统知识" 指向天干地支(六十甲子),"古典密码" 指向栅栏密码和凯撒密码。

第 1 步:传统知识解码------天干地支转数字

先将文件添加.zip的后缀名(因为文件开头有PK,PK 是 ZIP 文件格式的固定文件头标识,即Phillip Katz的缩写),然后打开。

题目给出一串天干地支年份:

复制代码
辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳

根据六十甲子表,将每个干支对应到其序号(从1开始计数):

天干地支 序号
辛卯 28
癸巳 30
丙戌 23
辛未 8
庚辰 17
癸酉 10
己卯 16
癸巳 30

得到数字序列:28, 30, 23, 8, 17, 10, 16, 30

题目背面写有 "+甲子" ,一甲子为 60年,所以每个数字都加上 60:

复制代码
28+60=88,30+60=90,23+60=83,8+60=68,
17+60=77,10+60=70,16+60=76,30+60=90

得到:88, 90, 83, 68, 77, 70, 76, 90

第 2 步:ASCII码转换

将上一步得到的数字对照 ASCII码表 转换为字符:

数字 ASCII字符
88 X
90 Z
83 S
68 D
77 M
70 F
76 L
90 Z

得到字符串:XZSDMFLZ

第 3 步:古典密码------栅栏密码解密

对 XZSDMFLZ 进行栅栏密码解密 (栏数为2和4尝试,因为密文 XZSDMFLZ 长度为 8,8 的因数有:1、2、4、8。排除1(等于没加密)和 8(等于原样),只剩 2 和 4 两种可能)。

解密时选择栏数为 4 ,得到结果 XMZFSLDZ (这里是要靠猜的/暴力破解的,只有栏数=4 的解密结果,在凯撒位移后能产生人类可读的拼音,所以反推栏数必然为 4。)

栅栏密码解密(栏数=4)原理:

  • 将密文按4行排列(因为栏数为4),注意排列时按列排,因为加密时就是按列读取并形成密文,这里需要还原加密时的排列场景。

    X M 第一行
    Z F 第二行
    S L
    D Z

  • 然后再按行读取(因为明文就是先按行排列,再按列读取,并形成密文,这里要反过来)即可还原出明文顺序。

第 4 步:古典密码------凯撒密码解密

对 XMZFSLDZ 进行凯撒密码暴力枚举(尝试所有26种位移)。

位移量为 5 时,得到有意义的拼音:

复制代码
XMZFSLDZ --(凯撒位移5)--> SHUANGYU

⚠️ 注意 :SHUANGYU 是拼音"霜羽"(题目来源作者名)。最终 Flag 需要大写提交。

第 5 步:验证

将 SHUANGYU 用 flag{} 包裹提交:

复制代码
flag{SHUANGYU}

🏁 最终 Flag

复制代码
flag{SHUANGYU}

补充:为什么做题要按照这个顺序?

在古典密码的套娃题中,"顺序"不是靠提示决定的,而是靠"尝试-排除-验证"的逻辑链条反向锁定的。

下面拆解一下"为什么一定是先栅栏后凯撒",以及"为什么不考虑其他密码"。

1. 为什么方案二(先凯撒后栅栏)被我们排除了?

我们试着按方案二来解一下,看看会得到什么结果:

密文是 XZSDMFLZ。

  • 第 1 步(方案二的解密) :先对密文做凯撒暴力枚举(位移 1~25)。

    比如尝试最常见的位移 5 :XZSDMFLZ 每位字母向前移 5 位,得到 CEXIRKQE。

    再尝试位移其他值,得到的都是诸如 YATE...、D... 之类的无意义字母组合。

  • 第 2 步(方案二的解密) :对上一步得到的乱码做栅栏(栏数 2)解密。

    拿位移 5 的结果 CEXIRKQE 举例,栅栏 2 解密(分成 CEXI 和 RKQE,交替读取)得到:CREKXQIE。

结论 :把位移 1 到 25 全部试一遍,再进行栅栏 2 或 4 的解密,没有任何一组结果能拼出 SHUANGYU 或任何有意义的拼音/英文单词。

3. 为什么方案一(先栅栏后凯撒)被我们选中了?

按方案一解密:

  • 第 1 步 :先栅栏(尝试因数 2 和 4)。

    栏数 2 得到 XMZFSLDZ(栏数 4 得到乱码,被淘汰)。

  • 第 2 步 :对 XMZFSLDZ 做凯撒暴力枚举。

    位移 5 时,恰好得到 SHUANGYU(拼音,有明确语义)。

结论 :在穷举了"所有可能的顺序(2种)× 所有可能的栏数(2种)× 所有可能的位移(25种)"之后,只有这一条路径产生了人类可读的语义。

💡 密码学中这叫 "明文校验(Plaintext Validation)" ------不是我们凭空选了顺序,而是唯一能跑出正确答案的那条路,反向锁定了加密时作者采用的顺序。

4. 为什么不考虑其他古典密码(如维吉尼亚、培根等)?

在实战中,我们遵循 "奥卡姆剃刀原则"(如无必要,勿增实体):

  • 维吉尼亚密码 :需要密钥(Key),而题目没有给出任何密钥提示,且密文长度只有 8 位,根本无法推测密钥,强行解密只会得到无穷多种可能,不符合 CTF 出题逻辑。
  • 培根密码 :需要将字母转为 A/B 组合(5 个一组),但 XZSDMFLZ 长度 8,不是 5 的倍数,强行分组会剩余,无法解。
  • 栅栏 + 凯撒 :题目名称"传统知识+古典密码 "明确指向最经典、最基础的几种古典密码。且在 ASCII 转出 XZSDMFLZ 后,这串字符全是字母、长度短、无特殊符号,栅栏(置换)和凯撒(替换)恰好是能处理这种纯字母串的最简单、最自然的两种变换。

CTF 解题潜规则:先用最简单的变换(栅栏、凯撒、Base64)试,解出语义就收手。如果解不出,再考虑进阶算法。本题在第一个组合(栅栏→凯撒)就命中了,说明这就是出题人的意图,不需要再浪费时间去试其他无关算法。

🏁 一句话总结

顺序不是题目提示的,而是"穷举所有参数组合后,唯一能产出汉语拼音(语义)的那个结果"反向推导出来的。

如果先凯撒后栅栏能出 SHUANGYU,那我们现在用的就是先凯撒后栅栏。只可惜它出不来,所以只能选现在的顺序。这在密码分析中叫做 "暴力枚举 + 语义筛选"。

相关推荐
龙亘川6 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务
kybs19916 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
XUEYUAN52126 天前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
LorryJovens6 天前
【LAAP科研】双系统具身AGI范式研究——基于LAAP认知架构与Jev概率决策模型的系统性技术调研与范式验证
人工智能·gpt·安全·架构
其实防守也摸鱼6 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
TechEdu2026066 天前
[人工智能]人工智能时代的零日漏洞与零日攻击
人工智能·网络安全·ai·信息安全
山东科恩光电6 天前
提升安全性的关键技术:安全触边在工业自动化中的应用解析
安全
LONGZETECH6 天前
一线职教实测:风光 580 汽车故障诊断仿真系统,破解实车实训四大核心痛点
人工智能·学习·安全·架构·汽车
Mikko76 天前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json