一个功能全面的密码学工具箱,使用 Go 语言实现。提供对称加密、非对称加密、哈希算法、数字签名、密钥管理、隐写术和密码分析等功能。
- 对称加密: AES-GCM, ChaCha20-Poly1305, SM4-ECB (国密)
- 非对称加密: RSA-OAEP, ECIES (ECC), SM2 (国密)
- 哈希算法: SHA-256/512, MD5, BLAKE2b, SM3 (国密)
- 数字签名: RSA-PSS, ECDSA, SM2 签名 (国密)
- 快速密钥生成: 一键生成随机密钥或从密码派生
- 批量文件处理: 支持通配符和递归目录加密
- 管道支持: Unix 风格的标准输入输出操作
- 进度条显示: 大文件处理实时进度和速度
- 配置文件: YAML 配置持久化默认设置
- 密钥加密存储 (SQLite + AES)
- 密钥生成与导出
- 支持 RSA 和 ECC 密钥对
- 主密钥派生 (PBKDF2)
- 图像隐写: LSB (最低有效位) 算法,支持 PNG 格式
- 文本隐写: 零宽字符隐写
- 隐写检测: 分析图像或文本是否包含隐藏数据
- 熵分析: 计算香农熵,判断数据随机性
- 频率分析: 字符频率统计,支持英语频率对比
- 凯撒密码破解: 自动尝试所有偏移量,使用卡方检验
- 密码强度评估: 多维度评分系统
# 克隆仓库
git clone https://github.com/xiaxiansong/crypto-toolbox.git
cd crypto-toolbox
# 安装依赖
go mod download
# 编译
make build
# 或直接使用 go build
go build -o cryptool ./cmd/cryptool/- Go 1.21+
- github.com/spf13/cobra (CLI 框架)
- github.com/tjfoc/gmsm (国密算法)
- golang.org/x/crypto (扩展密码库)
- github.com/mattn/go-sqlite3 (密钥存储)
- golang.org/x/image (图像处理)
# 生成 256 位随机密钥
cryptool keygen -s 32 -f hex
# 从密码派生密钥
cryptool keygen -p "MyPassword" -s 32 --salt "custom-salt" -i 100000
# 保存到文件
cryptool keygen -s 32 -o mykey.txt
# 使用示例
KEY=$(cryptool keygen -s 32 -f hex)
cryptool encrypt -a aes -k $KEY -i file.txt -o file.enc# 生成随机密钥 (32 字节 = 256 位)
echo "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" > key.txt
# 加密文件
cryptool encrypt -a aes -k $(cat key.txt) -i plaintext.txt -o encrypted.bin
# 解密文件
cryptool decrypt -a aes -k $(cat key.txt) -i encrypted.bin -o decrypted.txt
# 使用 ChaCha20
cryptool encrypt -a chacha20 -k $(cat key.txt) -i file.txt -o file.enc
# 使用国密 SM4
cryptool encrypt -a sm4 -k 0123456789abcdef0123456789abcdef -i data.txt -o data.enc# 计算文件哈希
cryptool hash -a sha256 -i document.pdf
cryptool hash -a blake2b -i file.bin
# 计算文本哈希
cryptool hash -a sha256 -t "Hello World"
# 使用国密 SM3
cryptool hash -a sm3 -i data.txt# 生成 RSA 密钥对 (2048 位)
cryptool key generate -a rsa -b 2048 -n mykey -o mykey
# 生成 ECC 密钥对 (P-256 曲线)
cryptool key generate -a ecc -n ecckey -o ecckey
# 生成 4096 位 RSA 密钥
cryptool key generate -a rsa -b 4096 -n strongkey -o strongkey# 签名文件
cryptool sign -a rsa -k mykey_private.pem -i document.pdf -o signature.sig
# 验证签名
cryptool verify -a rsa -k mykey_public.pem -i document.pdf -s signature.sig
# 使用 ECDSA
cryptool sign -a ecdsa -k ecckey_private.pem -i data.txt -o data.sig
cryptool verify -a ecdsa -k ecckey_public.pem -i data.txt -s data.sig# 将数据隐藏在图像中 (LSB)
cryptool stego hide -c cover.png -d secret.txt -o stego.png
# 从图像中提取隐藏数据
cryptool stego extract -i stego.png -o extracted.txt
# 检测图像是否可能包含隐藏数据
cryptool stego detect -i suspicious.png
# 文本隐写 (零宽字符)
cryptool stego hide -c cover.txt -t "secret message" -o stego.txt
cryptool stego extract -i stego.txt -o secret.txt
cryptool stego detect -i stego.txt# 熵分析
cryptool analyze entropy -i encrypted_file.bin
# 频率分析
cryptool analyze frequency -i text.txt
cryptool analyze frequency -t "Hello World"
# 破解凯撒密码
cryptool analyze caesar -t "KHOOR ZRUOG"
# 密码强度评估
cryptool analyze password -p "MyP@ssw0rd123"# 批量加密当前目录所有 .txt 文件
cryptool batch encrypt -a aes -k $KEY -p "*.txt" -o encrypted/
# 递归加密子目录
cryptool batch encrypt -a aes -k $KEY -p "docs/**/*.md" -o backup/ -r
# 批量加密特定目录
cryptool batch encrypt -a aes -k $KEY -p "/data/*.dat" -o /backup/# 从标准输入读取并哈希
echo "Hello World" | cryptool hash -a sha256 -i -
# 管道组合加密
cat file.txt | cryptool encrypt -a aes -k $KEY -i - -o - | base64
# 链式处理
curl https://example.com/data.bin | \
cryptool encrypt -a chacha20 -k $KEY -i - -o - | \
aws s3 cp - s3://bucket/encrypted.bin-h, --help: 显示帮助信息-v, --version: 显示版本信息
| 命令 | 说明 |
|---|---|
encrypt |
对称加密 |
decrypt |
对称解密 |
hash |
哈希计算 |
sign |
数字签名 |
verify |
签名验证 |
key |
密钥管理 |
keygen |
快速密钥生成 ⭐ NEW |
batch |
批量文件操作 ⭐ NEW |
stego |
隐写术操作 |
analyze |
密码分析 |
# 查看特定命令帮助
cryptool encrypt --help
cryptool stego --help
cryptool analyze --helpcrypto-toolbox/
├── cmd/
│ └── cryptool/ # 主程序入口
├── pkg/
│ ├── symmetric/ # 对称加密 (AES, ChaCha20, SM4)
│ ├── asymmetric/ # 非对称加密 (RSA, ECC, SM2)
│ ├── hash/ # 哈希算法
│ ├── signature/ # 数字签名
│ ├── keystore/ # 密钥管理
│ ├── steganography/ # 隐写术
│ ├── analysis/ # 密码分析
│ └── utils/ # 工具函数
├── internal/
│ └── cli/ # CLI 命令实现
├── test/ # 测试文件
├── go.mod # Go 模块定义
├── go.sum # 依赖版本锁定
├── Makefile # 构建脚本
└── README.md # 项目文档
make build # 编译二进制文件
make clean # 清理构建产物
make test # 运行测试
make install # 安装到 $GOPATH/bingo test ./...
go test -v ./pkg/symmetric/
go test -cover ./pkg/...# 发送方
cryptool encrypt -a aes -k $(openssl rand -hex 32) -i sensitive.doc -o sensitive.enc
# 接收方
cryptool decrypt -a aes -k <key> -i sensitive.enc -o sensitive.doc# 生成哈希
cryptool hash -a sha256 -i file.zip > file.zip.sha256
# 验证完整性
cryptool hash -a sha256 -i downloaded.zip
# 比对输出与 file.zip.sha256# 签名发布包
cryptool sign -a rsa -k release_key.pem -i app.tar.gz -o app.tar.gz.sig
# 用户验证签名
cryptool verify -a rsa -k public_key.pem -i app.tar.gz -s app.tar.gz.sig# 在图片中隐藏机密文件
cryptool stego hide -c holiday.png -d confidential.pdf -o holiday_stego.png
# 提取机密文件
cryptool stego extract -i holiday_stego.png -o recovered.pdf- 使用强随机密钥 (至少 256 位)
- 妥善保管私钥,使用 0600 权限
- 定期更换密钥
- 不要在命令行直接传递敏感密钥
- 使用环境变量或密钥管理服务
- 对称加密: 推荐 AES-GCM 或 ChaCha20-Poly1305
- 非对称加密: 推荐 RSA-2048+ 或 ECC-P256+
- 哈希: 推荐 SHA-256 或 BLAKE2b
- 签名: 推荐 RSA-PSS 或 ECDSA
- MD5 哈希 (已被攻破)
- ECB 模式 (不安全)
- 小于 2048 位的 RSA 密钥
本项目适合:
- 密码学课程实验
- 信息安全学习
- Go 语言密码学编程
- 软件著作权申请
# 总代码量约 3600+ 行
- pkg/: 2300+ 行 (核心算法实现)
- internal/cli/: 1000+ 行 (CLI 接口)
- cmd/: 50+ 行 (主程序)
# 优化更新(2024-01-22)
+ 新增功能: 6 个模块
+ 新增代码: 518 行 (+16.7%)
+ 详见: OPTIMIZATION_REPORT.md- 完整的密码学算法库 - 涵盖对称、非对称、哈希、签名
- 国密算法支持 - SM2/SM3/SM4 全面支持
- 密钥管理系统 - 带加密存储的完整生命周期管理
- 隐写术功能 - 图像和文本双模式,少见的特色功能
- 密码分析工具 - 教学与实用结合
- 跨平台支持 - 纯 Go 实现,一次编译到处运行
欢迎提交 Issue 和 Pull Request!
MIT License
xiaxiansong
注意: 本软件仅用于学习和研究目的,请遵守当地法律法规。