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

📌 题目信息

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

🛠️ 使用工具

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

📝 解题思路

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

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

先将文件添加.zip的后缀名(因为文件开头有PKPK 是 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 步:验证

SHUANGYUflag{} 包裹提交:

复制代码
flag{SHUANGYU}

🏁 最终 Flag

复制代码
flag{SHUANGYU}

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

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

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

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

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

密文是 XZSDMFLZ

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

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

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

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

    拿位移 5 的结果 CEXIRKQE 举例,栅栏 2 解密(分成 CEXIRKQE,交替读取)得到: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,那我们现在用的就是先凯撒后栅栏。只可惜它出不来,所以只能选现在的顺序。这在密码分析中叫做 "暴力枚举 + 语义筛选"

相关推荐
王维同学2 小时前
进程模块枚举、映像身份与线程启动地址关联
c++·windows·安全
吴声子夜歌5 小时前
网络安全——概述(一)
安全·web安全
airobotcn7 小时前
空地一体化巡检机器人系统落地实战指南
安全·机器人·无人机·智慧园区·巡逻
愚公搬代码7 小时前
【愚公系列】《Web应用安全》003-测试环境的搭建
前端·安全
大模型搬砖师7 小时前
高校科研管理上 AI:科研处、课题组、信息中心的三方分歧怎么调和
人工智能·安全
qyyyyy5709 小时前
英文技术标准和协议规范怎么读?RFC、接口规范与安全标准 PDF 翻译流程
网络协议·网络安全·机器翻译·csrf·技术美术
智脑API9 小时前
CCSwitch Claude Code 国内怎么接入?Windows、VS Code 配置与安全使用教程
安全·vs code·ccswitch
MartinYeung59 小时前
[论文学习]ProAct:针对LLM越狱的主动防禦框架
网络·学习·安全
发量惊人的中年网工10 小时前
中小企业网络管理进阶:从设备堆叠到统一管理
服务器·网络·安全·网络安全·php·制造