CTF密码学入门:从古典加密到RSA实战
2026/9/13 5:09:51 网站建设 项目流程

1. CTF密码学入门基础

密码学是CTF竞赛中最基础也是最核心的领域之一。作为CTF选手,掌握密码学知识不仅能帮助我们解决专门的密码学题目,还能在其他类型的题目中发挥重要作用。第一周的密码学学习主要围绕以下几个基础知识点展开:

1.1 古典密码与替换加密

古典密码是密码学的起源,主要包括凯撒密码、栅栏密码、维吉尼亚密码等。这些密码虽然简单,但在CTF比赛中经常以各种变体形式出现。

凯撒密码是最典型的替换密码,通过将字母表中的每个字母按照固定位数进行替换。例如,位移为3时:

  • 明文:HELLO
  • 密文:KHOOR

在实际CTF题目中,凯撒密码可能会:

  1. 使用非字母字符
  2. 结合其他编码方式(如Base64)
  3. 需要先识别出是凯撒加密

提示:当遇到看似随机的字母组合时,可以尝试用凯撒密码暴力破解,观察是否有可读的英文单词出现。

1.2 现代对称加密算法

现代对称加密算法在CTF中非常常见,主要包括:

  1. AES:最常用的对称加密算法,支持128/192/256位密钥
  2. DES:较老的加密标准,现在主要出现在历史题目中
  3. RC4:流加密算法,在Web题目中偶尔出现

典型的解题思路:

from Crypto.Cipher import AES key = b'this_is_a_key123' iv = b'initial_vector456' cipher = AES.new(key, AES.MODE_CBC, iv) plaintext = cipher.decrypt(ciphertext)

常见考察点:

  • 弱密钥(如全0密钥)
  • ECB模式下的图案泄露
  • CBC模式的位翻转攻击

2. 非对称加密与RSA

RSA是非对称加密的代表,也是CTF密码学题目中出现频率最高的算法之一。

2.1 RSA基础原理

RSA的核心在于大数分解难题,主要参数:

  • p,q:大质数
  • n = p*q
  • φ(n) = (p-1)*(q-1)
  • e:公钥指数(通常为65537)
  • d:私钥指数,满足 e*d ≡ 1 mod φ(n)

加密过程:c = m^e mod n 解密过程:m = c^d mod n

2.2 常见RSA攻击方法

  1. 小公钥指数攻击: 当e很小时(如e=3),如果m^e < n,可以直接开方得到明文

  2. 共模攻击: 相同n不同e的情况下,可以通过扩展欧几里得算法恢复明文

  3. 因数分解攻击: 当n较小时(如512bit),可以用工具直接分解

    python -m primefac -vs -m=pollardrho_brent 12345678901234567890
  4. Wiener攻击: 当d较小时,可以通过连分数展开恢复私钥

3. 编码与杂项密码

3.1 常见编码方式

  1. Base家族

    • Base64:最常用,特征是有"="填充
    • Base32:全大写字母和数字
    • Base16(Hex):纯十六进制
  2. ASCII码

    • 十进制、十六进制、八进制表示
    • 题目常给出形如"104 101 108 108 111"的数字串
  3. Unicode

    • UTF-8编码
    • 题目可能给出"\u5927\u5bb6\u597d"形式的编码

3.2 其他杂项密码

  1. 莫尔斯电码

    • 由"."和"-"组成
    • 注意区分单词间隔和字母间隔
  2. 培根密码

    • 使用两组不同字符表示二进制
    • 如ABABA代表字母A
  3. 二维码与条形码

    • 需要识别并解码图片中的编码信息

4. 实战技巧与工具

4.1 常用工具推荐

  1. 在线解密网站

    • CyberChef(瑞士军刀式工具)
    • dcode.fr(支持多种古典密码)
  2. Python库

    from Crypto.Util.number import long_to_bytes, bytes_to_long from base64 import b64decode, b64encode
  3. 命令行工具

    # Base64解码 echo "SGVsbG8=" | base64 -d # Hex解码 echo "48656c6c6f" | xxd -r -p

4.2 解题通用思路

  1. 观察密文特征

    • 是否有明显的模式(如固定前缀)
    • 字符集范围(是否只有字母和数字)
  2. 尝试常见编码

    • 先尝试Base64/Hex解码
    • 查看ASCII码范围
  3. 分析加密方式

    • 题目描述中的提示
    • 附件中可能包含加密脚本
  4. 暴力破解

    • 对于简单密码可以尝试所有可能
    • 编写脚本自动化测试

5. 典型题目解析

5.1 凯撒密码变种

题目给出:

密文:XJHWJY RJXXFLJ 提示:位移不固定

解题步骤:

  1. 发现都是大写字母,可能是凯撒变种
  2. 尝试发现第一个单词5字母,可能是"HELLO"
  3. 计算H→X位移:X(23)-H(7)=16
  4. 验证E(4)+16=20→T(19)不符
  5. 考虑位移递减:第一个字母+16,第二个+15...
  6. 成功解密出"HELLO WORLD"

5.2 RSA因数分解

题目给出:

n = 1234567890123456789012345678901234567890123456789012345678901234 e = 65537 c = 1234567890123456789012345678901234567890123456789012345678901234

解题步骤:

  1. 发现n较小,尝试分解:
    import sympy p,q = sympy.factorint(n).keys()
  2. 计算φ(n)和d
  3. 解密得到flag

6. 学习资源与进阶方向

6.1 推荐学习路径

  1. 入门

    • 《图解密码技术》
    • Crypto 101在线课程
  2. 进阶

    • 《应用密码学》
    • Cryptopals挑战题
  3. 专业

    • 密码学数学基础
    • 现代密码学理论

6.2 常见比赛考点

  1. 混合题型

    • 密码学+逆向
    • 密码学+Web
  2. 新颖密码系统

    • 自定义加密算法
    • 基于区块链的密码题目
  3. 侧信道攻击

    • 时间攻击
    • 错误注入攻击

密码学的学习需要理论与实践相结合。建议每周至少完成3-5道密码学题目,并建立自己的解题笔记库。随着经验的积累,你会逐渐形成对各种密码题目的敏感度和快速解题能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询