news 2026/6/11 6:00:52

从凯撒到RSA:给CTF萌新的密码学入门实战指南(附30个经典题目解析)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从凯撒到RSA:给CTF萌新的密码学入门实战指南(附30个经典题目解析)

从凯撒到RSA:给CTF萌新的密码学入门实战指南

第一次参加CTF比赛时,面对那些看似天书般的密码学题目,我完全摸不着头脑。直到后来系统性地梳理了密码学的发展脉络和解题思路,才发现原来每个加密算法背后都有其独特的逻辑和破解方法。本文将带你从零开始,构建一套完整的CTF密码学解题框架。

1. 古典密码:密码学的起源与基础

古典密码是理解现代加密技术的基石。这些看似简单的加密方法,却蕴含着密码学最核心的思想。

1.1 凯撒密码与移位加密

凯撒密码是最著名的替换密码之一,其核心思想是将字母表中的每个字母按固定位数进行移位。例如,当移位数为3时:

明文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

破解凯撒密码的Python实现:

def caesar_decrypt(ciphertext, shift): result = "" for char in ciphertext: if char.isalpha(): ascii_offset = ord('a') if char.islower() else ord('A') decrypted_char = chr((ord(char) - ascii_offset - shift) % 26 + ascii_offset) result += decrypted_char else: result += char return result # 示例:解密"khoor zruog" print(caesar_decrypt("khoor zruog", 3)) # 输出: hello world

常见变种与解题技巧

  • 尝试0-25所有可能的移位(暴力破解)
  • 通过频率分析确定最可能的移位值
  • 注意非字母字符通常保持不变

1.2 替换密码与频率分析

简单替换密码将每个明文字母映射到唯一的密文字母,比凯撒密码更安全但仍有规律可循。英语字母的典型频率分布如下:

字母频率(%)字母频率(%)
E12.70T9.06
A8.17O7.51
I6.97N6.75
S6.33H6.09

使用频率分析破解替换密码的步骤:

  1. 统计密文中各字母出现频率
  2. 对照英语字母频率表进行初步匹配
  3. 根据常见单词(如"the"、"and")进一步验证
  4. 逐步调整直到获得可读明文

2. 现代对称加密:从XOR到AES

对称加密使用相同密钥进行加密和解密,是现代密码学的重要组成部分。

2.1 XOR加密原理与应用

XOR(异或)是最基础的加密操作之一,其特性包括:

  • 可逆性:A XOR B XOR B = A
  • 比特级操作:逐位进行运算
  • 简单高效:计算速度快

单字节XOR加密的Python实现:

def xor_decrypt(ciphertext, key): return ''.join(chr(ord(c) ^ key) for c in ciphertext) # 示例:解密二进制密文"1010011"(ASCII表示) binary_cipher = "1010011" key = 0b0101010 # 十进制42 plaintext = chr(int(binary_cipher, 2) ^ key) print(plaintext) # 输出: '1' (ASCII 49)

CTF常见题型

  • 已知明文部分内容推断密钥
  • 使用频率分析破解单字节XOR
  • 多字节XOR需要更复杂的破解技术

2.2 块加密与AES实战

AES(Advanced Encryption Standard)是最常用的对称加密算法,其特点包括:

  • 固定128位块大小
  • 支持128、192、256位密钥长度
  • 多轮加密确保安全性

使用PyCryptodome进行AES解密的示例:

from Crypto.Cipher import AES from Crypto.Util.Padding import unpad def aes_decrypt(ciphertext, key, iv): cipher = AES.new(key, AES.MODE_CBC, iv) plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size) return plaintext.decode() # 示例数据(实际CTF题目会提供具体参数) key = b'Sixteen byte key' iv = b'Initialization V' ciphertext = b'\x9a\x82...\xd6' # 实际密文 print(aes_decrypt(ciphertext, key, iv))

解题要点

  • 确认加密模式(ECB、CBC等)
  • 检查是否提供初始向量(IV)
  • 注意填充方式(通常PKCS#7)

3. 非对称加密:RSA与椭圆曲线

非对称加密使用公钥和私钥对,解决了密钥分发问题。

3.1 RSA算法原理与CTF应用

RSA基于大数分解难题,其加密过程为:

  1. 选择两个大素数p和q
  2. 计算n = p * q
  3. 计算φ(n) = (p-1)*(q-1)
  4. 选择e使得1 < e < φ(n)且gcd(e, φ(n)) = 1
  5. 计算d ≡ e⁻¹ mod φ(n)

RSA加密/解密公式:

  • 加密:c ≡ mᵉ mod n
  • 解密:m ≡ cᵈ mod n

CTF中常见的RSA题型解题脚本:

from Crypto.Util.number import inverse, long_to_bytes # 已知参数 n = 55 e = 3 c = 4 # 分解n得到p=5, q=11 p, q = 5, 11 phi = (p-1)*(q-1) d = inverse(e, phi) m = pow(c, d, n) print(long_to_bytes(m)) # 输出: b'\x04' (原始消息为4)

进阶技巧

  • Wiener攻击(当d较小时)
  • 共模攻击(相同n不同e)
  • 小指数攻击(e=3且明文很小)

3.2 椭圆曲线密码学入门

椭圆曲线密码(ECC)在相同安全强度下使用更短的密钥,其基本运算包括:

  • 点加法:P + Q = R
  • 标量乘法:kP = P + P + ... + P(k次)

ECC参数通常包括:

  • 曲线方程:y² = x³ + ax + b
  • 基点G
  • 阶n
  • 余因子h

使用sage数学软件进行ECC计算的示例:

# 定义椭圆曲线 E = EllipticCurve(GF(p), [a, b]) G = E.gen(0) # 基点 n = G.order() # 阶 # 标量乘法 k = 12345 Q = k * G

4. 综合实战:30道CTF密码学题目精解

现在我们将各类密码学知识应用到实际CTF题目中,建立系统的解题思路。

4.1 编码与古典密码题目

Base64变种识别技巧

  • 标准Base64字符集:A-Z, a-z, 0-9, +, /
  • 常见变种:URL安全的Base64(用-和_替换+/)
  • 识别特征:末尾可能有1-2个=号

自动识别解码的Python代码:

import base64 def try_base64(data): try: return base64.b64decode(data).decode() except: try: return base64.urlsafe_b64decode(data).decode() except: return "Not a valid Base64" print(try_base64("SGVsbG8gQ1RGIQ==")) # 输出: Hello CTF!

栅栏密码解题步骤

  1. 确定轨道数(通常尝试2-5)
  2. 按之字形排列密文
  3. 按行读取得到明文

例如解密"TEITAOERHMNTSGDDY"(轨道数3):

T A H G Y E I T O R M T D D I E N S

按行读取:"THEYARESENDINGDUCKS"

4.2 现代密码综合题目

混合加密系统分析

  1. 识别各部分加密方式
  2. 按正确顺序解密
  3. 注意可能的编码转换

典型解题流程:

Base64 → AES解密 → XOR → 凯撒解密

隐写术与密码结合

  • 使用工具如steghide、binwalk
  • 检查文件元数据(exiftool)
  • 分析最低有效位(LSB)
# 使用binwalk分析文件 binwalk -e suspicious_image.jpg # 检查LSB隐写 stegolsb stegano -i image.png -s 100 -n 1

4.3 非对称密码挑战

RSA多参数攻击场景

  • 已知n和e,尝试分解n(factordb.com)
  • 相同n不同e的共模攻击
  • 广播攻击(相同明文用不同n加密)

共模攻击Python实现:

from math import gcd from Crypto.Util.number import inverse, long_to_bytes def common_modulus_attack(c1, c2, e1, e2, n): g, a, b = extended_gcd(e1, e2) if g != 1: return None if a < 0: c1 = inverse(c1, n) a = -a if b < 0: c2 = inverse(c2, n) b = -b m = (pow(c1, a, n) * pow(c2, b, n)) % n return long_to_bytes(m)

5. 工具链与资源推荐

高效的密码学解题离不开合适的工具,以下是我的实战工具箱。

5.1 必备在线工具

CyberChef(全能密码学工具箱):

  • 支持200多种操作
  • 可组合多种转换
  • 直观的图形界面

经典组合配方

From Hex → XOR Brute Force → Frequency analysis Base64 → Gunzip → File analysis

其他实用网站

  • dCode.fr(密码识别器)
  • Boxentriq(密码分析工具)
  • Cryptool(教育用密码软件)

5.2 本地脚本开发

高效的Python密码学库:

# 加密相关 from Crypto.Cipher import AES, DES, ChaCha20 from Crypto.PublicKey import RSA, ECC from Crypto.Protocol.KDF import scrypt # 实用功能 from Crypto.Util.number import bytes_to_long, long_to_bytes from Crypto.Util.Padding import pad, unpad from Crypto.Random import get_random_bytes # 哈希函数 import hashlib hashlib.sha256(b'data').hexdigest()

自动化解题框架结构

class CTFSolver: def __init__(self, ciphertext): self.ciphertext = ciphertext self.plaintext = None def detect_encoding(self): # 自动检测Base64/Hex/Binary等 pass def try_common_ciphers(self): # 尝试常见加密方式 pass def frequency_analysis(self): # 字母频率统计 pass

5.3 系统化学习路径

推荐学习顺序

  1. 古典密码(凯撒、替换、转置)
  2. 编码系统(Base64、Hex、ASCII)
  3. 对称加密(XOR、AES、DES)
  4. 非对称加密(RSA、ECC)
  5. 哈希函数(MD5、SHA)
  6. 综合挑战

实践建议

  • 从CTFtime.org找简单密码学题目
  • 参加picoCTF等新手友好比赛
  • 建立自己的解题代码库
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 5:58:56

终极免费方案:5分钟永久保存你的QQ空间数字记忆

终极免费方案&#xff1a;5分钟永久保存你的QQ空间数字记忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过&#xff0c;那些记录青春岁月的QQ空间说说&#xff0c;有一天会…

作者头像 李华
网站建设 2026/6/11 5:54:23

Diaphora终极指南:5个高级技巧提升二进制代码差异分析效率

Diaphora终极指南&#xff1a;5个高级技巧提升二进制代码差异分析效率 【免费下载链接】diaphora Diaphora, the most advanced Free and Open Source program diffing tool. 项目地址: https://gitcode.com/gh_mirrors/di/diaphora Diaphora作为目前最先进的免费开源程…

作者头像 李华
网站建设 2026/6/11 5:45:51

openClaw不能操作我的电脑提示没有权限如何解决?

一、最常见原因&#xff1a;没以管理员身份运行&#xff08;90% 问题&#xff09; 找到 Openclaw Windows一键启动.exe 右键 → 以管理员身份运行&#xff08;不要双击&#xff09; 若要永久管理员&#xff1a; 右键 → 属性 → 兼容性 勾选 以管理员身份运行此程序 确定后再打…

作者头像 李华
网站建设 2026/6/11 5:45:51

5分钟上手:CyberStrikeAI安全测试平台终极指南

5分钟上手&#xff1a;CyberStrikeAI安全测试平台终极指南 【免费下载链接】CyberStrikeAI CyberStrikeAI is an AI-native security testing platform built in Go. It integrates 100 security tools, an intelligent orchestration engine, role-based testing with predefi…

作者头像 李华