WeChall - Pimitive Encryption (Crypto, Logic)

Challenge

题名 "Pimitive Encryption" 是 "Pi" + "Primitive" 的谐音。一个用 One-Time Pad XOR 加密的文件,提示 key 是 "logical" 的。

加密文件 116921 字节,URL 上直接下载 pimitive.zip

Solution

Step 1: 确认 key = π 的十进制字符串

已知加密文件应为 ZIP(magic PK\x03\x04)。前 4 字节 XOR:

1
2
3
CIPHER:  63 DF 65 CF
ZIP: 50 4B 03 04
KEY: 33 2E 31 34 → "3.14"

key 是圆周率 π 的十进制展开字符串 "3.1415926535...",一次性 XOR 整个文件(不循环重复)。

Step 2: 生成 116921 位 π

方法 A(推荐):用 pi.delivery API 分块拉取

1
2
3
4
5
6
7
8
9
import requests

digits = "3."
start = 1 # after decimal point
while len(digits) < 116921:
n = min(1000, 116921 - len(digits))
r = requests.get(f"https://api.pi.delivery/v1/pi?start={start}&numberOfDigits={n}&radix=10")
digits += r.json()["content"]
start += n

方法 B:Chudnovsky 算法 + Python decimal 高精度

1
2
3
4
5
from decimal import Decimal, getcontext

getcontext().prec = 120000
# Chudnovsky series: π = 426880√10005 / Σ(k=0..∞) (6k)!(13591409+545140134k)/(3k)!(k!)^3(-640320)^(3k)
# 迭代约 8300 次收敛到 120K 位

Step 3: XOR 解密

1
2
3
key = pi_str.encode()[:len(enc)]
dec = bytes(e ^ k for e, k in zip(enc, key))
# → 输出为有效 ZIP 文件,含 netforce33.bmp

Step 4: 解压提取 BMP

1280×384 的 BMP 图片,内容为 "OneTimePad" 字样下方一行字。Tesseract OCR 或肉眼辨认:

1
Actually the password is: Botterbloom
Botterbloom