CTF中那些古典密码
字数 1616 2025-08-09 18:44:06

CTF中的古典密码学详解

一、凯撒密码(Caesar Cipher)

基本原理

凯撒密码是一种通过字母位移实现的替换密码,将字母表中的每个字母按照固定的偏移量进行替换。

加密方法

  • 明文:"Hello world",偏移量为3
  • 加密过程:A→D, B→E, ..., H→K, e→h, l→o等
  • 密文:"Khoor zruog"

特殊变种

  • 偏移量为10:Avocat
  • 偏移量为13:ROT13(自反密码,加密解密使用相同算法)
  • 偏移量为-5:Cassis
  • 偏移量为-6:Cassette

在线解密工具

https://www.qqxiuzi.cn/bianma/kaisamima.php

二、培根密码(Bacon's Cipher)

基本原理

将每个字母转换为5个a/b(或A/B)组成的特定编码组合。

特点

  • 密文仅由a/b或A/B组成
  • 不区分大小写

示例

"Hello" → "aabbbAABAAABABBABABBABBBA"

在线解密工具

https://tool.bugku.com/peigen/

三、摩斯密码(Morse Cipher)

基本原理

通过不同排列的短信号(·)和长信号(-)表示字母、数字和标点符号。

特点

  • 广泛应用于电报通信
  • 每个字符由1-5个信号组成
  • 字符间用空格分隔,单词间用/分隔

示例

"Hello" → "···· · ·-·· ·-·· ---"

在线解密工具

moersima.00cha.net

四、栅栏密码(Rail-fence Cipher)

1. Z型栅栏密码

加密方法

  • 将明文按N行排列成Z字形
  • 按列从上到下读取形成密文

示例

  • 明文:"Helloworld"
  • N=2:"Hloolelwrd"
  • N=3:"Hlodeorlwl"

2. W型栅栏密码

加密方法

  • 将明文按N行排列成W字形
  • 按行读取形成密文

在线解密工具

  • Z型:https://www.qqxiuzi.cn/bianma/zhalanmima.php
  • W型:http://www.atoolbox.net/Tool.php?Id=777

五、仿射密码(Affine Cipher)

数学原理

  • 加密函数:E(x) = (ax + b) mod 26
  • 解密函数:D(x) = a⁻¹(x - b) mod 26
  • 其中a与26互质

示例

a=5, b=8;明文"AFFINECIPHER"

Python解密脚本

def get(a, b):
    if b == 0:
        return 1, 0
    else:
        k = a // b
        remainder = a % b
        x1, y1 = get(b, remainder)
        x, y = y1, x1 - k * y1
    return x, y

s = input("请输入解密字符:").upper()
a = int(input("请输入a:"))
b = int(input("请输入b:"))
# 求a关于26的乘法逆元
x, y = get(a, 26)
a1 = x % 26
l = len(s)
for i in range(l):
    cipher = a1 * (ord(s[i])-65 - b) % 26
    res = chr(cipher + 65)
    print(res, end='')

六、猪圈密码(Pigpen Cipher)

基本原理

  • 基于格子的简单替代密码
  • 每个字母对应特定的符号或格子图案

特点

  • 符号由直线和点组成
  • 有固定的对应关系表

在线解密工具

http://ctf.ssleye.com/pigpen.html

七、维吉尼亚密码(Vigenère Cipher)

基本原理

  • 使用多个凯撒密码组成的密码表
  • 需要密钥和明文两个元素

加密步骤

  1. 将密钥循环扩展至与明文等长(密钥流)
  2. 对每个字符:密文 = (明文字符 + 密钥字符偏移量) mod 26

示例

  • 明文:"ATTACKDAWN"
  • 密钥:"LEMON"
  • 密钥流:"LEMONLEMONLE"
  • 密文:"LXFOPVEFRNHR"

特点

  • 比简单凯撒密码更安全
  • 可使用维吉尼亚方阵进行加密解密

总结与识别特征

密码类型 主要识别特征
凯撒密码 字母替换,固定偏移
培根密码 仅含a/b或A/B字符
摩斯密码 由·和-组成的序列
栅栏密码 字符重排,长度不变
仿射密码 数学公式加密,需参数a,b
猪圈密码 特殊符号或格子图案
维吉尼亚 需要密钥,多表替换

练习建议

  1. 熟悉每种密码的典型特征
  2. 掌握基本的加密解密流程
  3. 积累常见密码的识别经验
  4. 准备线下赛时需提前下载解密脚本(比赛通常禁止联网)
CTF中的古典密码学详解 一、凯撒密码(Caesar Cipher) 基本原理 凯撒密码是一种通过字母位移实现的替换密码,将字母表中的每个字母按照固定的偏移量进行替换。 加密方法 明文:"Hello world",偏移量为3 加密过程:A→D, B→E, ..., H→K, e→h, l→o等 密文:"Khoor zruog" 特殊变种 偏移量为10:Avocat 偏移量为13:ROT13(自反密码,加密解密使用相同算法) 偏移量为-5:Cassis 偏移量为-6:Cassette 在线解密工具 https://www.qqxiuzi.cn/bianma/kaisamima.php 二、培根密码(Bacon's Cipher) 基本原理 将每个字母转换为5个a/b(或A/B)组成的特定编码组合。 特点 密文仅由a/b或A/B组成 不区分大小写 示例 "Hello" → "aabbbAABAAABABBABABBABBBA" 在线解密工具 https://tool.bugku.com/peigen/ 三、摩斯密码(Morse Cipher) 基本原理 通过不同排列的短信号(·)和长信号(-)表示字母、数字和标点符号。 特点 广泛应用于电报通信 每个字符由1-5个信号组成 字符间用空格分隔,单词间用/分隔 示例 "Hello" → "···· · ·-·· ·-·· ---" 在线解密工具 moersima.00cha.net 四、栅栏密码(Rail-fence Cipher) 1. Z型栅栏密码 加密方法 将明文按N行排列成Z字形 按列从上到下读取形成密文 示例 明文:"Helloworld" N=2:"Hloolelwrd" N=3:"Hlodeorlwl" 2. W型栅栏密码 加密方法 将明文按N行排列成W字形 按行读取形成密文 在线解密工具 Z型:https://www.qqxiuzi.cn/bianma/zhalanmima.php W型:http://www.atoolbox.net/Tool.php?Id=777 五、仿射密码(Affine Cipher) 数学原理 加密函数:E(x) = (ax + b) mod 26 解密函数:D(x) = a⁻¹(x - b) mod 26 其中a与26互质 示例 a=5, b=8;明文"AFFINECIPHER" Python解密脚本 六、猪圈密码(Pigpen Cipher) 基本原理 基于格子的简单替代密码 每个字母对应特定的符号或格子图案 特点 符号由直线和点组成 有固定的对应关系表 在线解密工具 http://ctf.ssleye.com/pigpen.html 七、维吉尼亚密码(Vigenère Cipher) 基本原理 使用多个凯撒密码组成的密码表 需要密钥和明文两个元素 加密步骤 将密钥循环扩展至与明文等长(密钥流) 对每个字符:密文 = (明文字符 + 密钥字符偏移量) mod 26 示例 明文:"ATTACKDAWN" 密钥:"LEMON" 密钥流:"LEMONLEMONLE" 密文:"LXFOPVEFRNHR" 特点 比简单凯撒密码更安全 可使用维吉尼亚方阵进行加密解密 总结与识别特征 | 密码类型 | 主要识别特征 | |---------|------------| | 凯撒密码 | 字母替换,固定偏移 | | 培根密码 | 仅含a/b或A/B字符 | | 摩斯密码 | 由·和-组成的序列 | | 栅栏密码 | 字符重排,长度不变 | | 仿射密码 | 数学公式加密,需参数a,b | | 猪圈密码 | 特殊符号或格子图案 | | 维吉尼亚 | 需要密钥,多表替换 | 练习建议 熟悉每种密码的典型特征 掌握基本的加密解密流程 积累常见密码的识别经验 准备线下赛时需提前下载解密脚本(比赛通常禁止联网)