《为了找回我的压缩包密码,我手写了一个 CUDA 加速器》

  1. 前言:一个悲伤的故事

上周翻旧硬盘,发现了一个 5 年前的加密压缩包 Photos.rar。那是大一时的照片备份,但我死活想不起密码了。

试了几个市面上的 CPU 暴力破解工具,看着那个进度条我绝望了:预计剩余时间:129 年。

我看了一眼机箱里那张闲置的 RTX 3090,又看了一眼龟速爬行的 CPU,作为一个计算机专业的学生,我不能忍。

“既然 CPU 跑不动,为什么不让 GPU 来跑?”

于是,趁着周末,我手撸了一个基于 CUDA 的分布式密码恢复工具——RapidRAR

结果?速度从 1.2 万次/秒 飙升到了 1.1 亿次/秒,性能提升了整整 8900 倍。 那个原本需要跑 100 年的密码,喝杯咖啡的功夫就出来了。


  1. 为什么 CPU 这么慢?

RAR 的加密算法(尤其是 RAR5)非常“鸡贼”。它使用了 AES-256 加密,并且在密钥派生函数(KDF)中引入了大量的哈希迭代(SHA-256)。

这意味着,验证每一个密码,CPU 都要进行数万次的哈希运算。CPU 虽然单核强,但核心少(也就十几个),面对这种“计算密集型”任务,简直是被降维打击。

而 GPU 呢?它有几千个 CUDA Core。这种“大量并行、逻辑简单”的哈希计算,简直就是为 GPU 量身定做的。

  1. 架构设计:Python 负责指挥,CUDA 负责拼命

我不希望为了写个工具去啃几千行 C++,所以我采用了一个异构架构(Heterogeneous Architecture)

● 控制层 (Python):负责脏活累活。读取字典、生成掩码、容错处理、进度显示。

● 计算层 (CUDA Kernel):负责玩命计算。我手写了 CUDA Kernel (.cu),直接在显存里进行高强度的哈希校验。

这是我的系统架构图:

在这个设计中,Python 就像是“包工头”,负责把任务打包成一个个 Batch(批次),通过 PCIe 总线扔给 GPU。GPU 就像是几千个“打工人”,瞬间算完并返回结果。

  1. 遇到的坑与优化 (Implementation Details)

写这个工具并没有想象中那么顺利,主要解决了几个性能瓶颈:

1. Python GIL 锁的问题

Python 的多线程在 CPU 密集型任务下是假的。所以我完全剥离了计算逻辑,Python 只负责 IO。同时,为了避免 GPU 等 CPU(喂不饱),我设计了一个 Producer-Consumer 模型,确保显卡利用率稳定在 95% 以上。

2. PCIe 带宽瓶颈

一开始我发现 GPU 经常闲置,原来是数据传输太慢了。

解决方案:实现了动态批处理 (Dynamic Batching)。不是生成一个密码传一个,而是一次性生成 1000 万个密码索引,打包传到显存(VRAM),让 GPU 一次跑个爽,最大化摊薄了传输开销。

3. 跨平台适配 (Apple M4 支持)

我也想在我的 MacBook 上跑。因为 Mac 没有 NVIDIA 显卡,我专门写了一套 multiprocessing 后端,利用 M 系列芯片的性能核,跑出了接近 12 万次/秒的成绩(比 Intel i7 快了 10 倍),虽然打不过 3090,但作为移动端非常能打。

  1. 性能实测 (Benchmark)

测试目标是一个 AES-256 加密的 RAR5 文件。

结论: 在 3090 上,它比 CPU 快了接近 9000 倍。这什么概念?CPU 跑一年,它只需要 1 小时。

  1. 怎么用?(Quick Start)

为了让大家都能用上,我把环境配置做得非常简单。

第一步:Clone 代码

git clone https://github.com/aLittlecrocodile/RapidRAR.git
cd RapidRAR
pip install -r requirements.txt

第二步:一键运行
它会自动检测你的硬件。如果你有 N 卡,自动开启 CUDA;如果是 Mac,自动开启多进程。
# 比如你知道密码是 4 位数字
python main.py --rar_file my_secret.rar --mask '?d?d?d?d'


6. 写在最后

这个项目最初只是为了救急,但写着写着发现优化性能的过程真的很有趣(特别是看到 GPU 占用率跑满的那一刻)。

目前项目已经开源,功能还比较基础。如果你也对 CUDA 编程、密码学 感兴趣,或者单纯想找回你的压缩包密码,欢迎来玩!

求一个 Star <span class=

标签: none

评论已关闭