项目简介
Crypto++(又称 cryptopp)是由 Wei Dai 从 1995 年开始维护的开源 C++ 密码学类库,历经 30 年持续迭代,是 C++ 生态中最成熟、最全面的加密算法集合。它几乎包含了所有主流和经典的密码学算法实现,从对称加密、非对称加密、哈希到消息认证码、数字签名、密钥协商,并提供了对国密标准 SM2/SM3/SM4 的原生支持。最新版本 CRYPTOPP_8_9_0 于 2023 年发布。
GitHub 数据
- 仓库地址: weidai11/cryptopp
Stars: 5,465 Forks: 1,680 - License: 公共领域(Public Domain)及部分 Boost 许可
- 主要语言: C++
- 版本: CRYPTOPP_8_9_0(2023-10-01)
- 维护状态: 活跃维护
- 定位: 免费 C++ 密码学类库,完整加密算法集合
核心功能
- 对称加密:AES(128/192/256)、DES/3DES、Blowfish、Twofish、ChaCha20、Camellia、Serpent 等
- 非对称加密:RSA、DSA、ECDSA(NIST P-192/256/384/521)、EdDSA(Ed25519)、ElGamal、LUC 等
- 哈希函数:SHA-1、SHA-2(224/256/384/512)、SHA-3、BLAKE2、SM3、RIPEMD、Whirlpool 等
- 消息认证码(MAC):HMAC、CMAC、Poly1305、VMAC 等
- 数字签名:RSA-PSS、DSA、ECDSA、Ed25519、SM2 签名等
- 密钥协商:DH、ECDH、MQV、HMQV、SM2 密钥交换
- 国密支持:SM2(签名+密钥交换)、SM3(哈希)、SM4(分组密码)
- 辅助工具:Base64/Base32/Hex 编解码、随机数生成器(硬件 RNG/软件 PRNG)、密码安全比较
技术栈
- C++11/14/17:模板元编程实现高性能泛型算法
- 汇编优化:对关键算法(AES-NI、SHA-NI、SM4 等)提供汇编级手工优化
- 跨平台:支持 Windows、Linux、macOS、Android、iOS、BSD
- 测试框架:内置算法自校验,通过 NIST 向量测试
安装与使用
编译安装(Linux / macOS):
git clone https://github.com/weidai11/cryptopp.git
cd cryptopp
make -j$(nproc)
sudo make install
Windows 编译(Visual Studio):
# 使用 CMake 或直接打开 cryptest.sln
cmake -S . -B build
cmake --build build --config Release
基础使用示例:
#include <cryptopp/aes.h>
#include <cryptopp/modes.h>
#include <cryptopp/filters.h>
#include <cryptopp/hex.h>
#include <iostream>
using namespace CryptoPP;
int main() {
byte key[AES::DEFAULT_KEYLENGTH] = {0};
byte iv[AES::BLOCKSIZE] = {0};
std::string plain = "Hello, Crypto++!";
std::string cipher, recovered;
// AES-CBC 加密
CBC_Mode<AES>::Encryption e;
e.SetKeyWithIV(key, sizeof(key), iv);
StringSource s1(plain, true,
new StreamTransformationFilter(e,
new StringSink(cipher)));
// 输出十六进制密文
std::string encoded;
StringSource s2(cipher, true,
new HexEncoder(new StringSink(encoded)));
std::cout << "Cipher: " << encoded << std::endl;
// AES-CBC 解密
CBC_Mode<AES>::Decryption d;
d.SetKeyWithIV(key, sizeof(key), iv);
StringSource s3(cipher, true,
new StreamTransformationFilter(d,
new StringSink(recovered)));
std::cout << "Recovered: " << recovered << std::endl;
return 0;
}
适用场景
- 桌面/服务器应用加密:安全存储、加密通信、配置文件加密
- 区块链与数字货币:密钥生成、交易签名、地址哈希
- 文件加密工具:全盘加密、文件级加密、压缩包加密
- 国密合规项目:SM2/SM3/SM4 在金融、政务等领域的合规实现
- 安全通信协议:TLS 底层实现、自定义安全传输协议
- 密码学教学:学习各类加密算法的工作原理和使用方法
竞品对比
| 对比项 | Crypto++ | OpenSSL | Botan | libsodium |
|---|---|---|---|---|
| 接口语言 | C++ 原生 | C | C++ | C |
| 算法全面性 | 最全面 | 全面 | 全面 | 偏现代 |
| 国密支持 | SM2/SM3/SM4 | 有扩展 | 有限 | 无 |
| C++ 风格 | RAII + 模板 | 纯 C | C++ 风格 | C 风格 |
| 活跃历史 | 30 年 | 25 年 | 10 年 | 10 年 |
| 许可证 | 公共领域 | Apache 2.0 | BSD-2 | ISC |
| 安装复杂度 | 中等 | 低 | 低 | 低 |
| 文档完善度 | 中等 | 好 | 好 | 好 |
参考资料
- GitHub 仓库: https://github.com/weidai11/cryptopp
- 官方 Wiki: https://www.cryptopp.com/wiki/
- 官方文档 (Doxygen): https://www.cryptopp.com/docs/ref/
- NIST 加密标准: https://csrc.nist.gov/publications/fips
文档信息
- 本文作者:zhupite
- 本文链接:https://zhupite.com/sec/cryptopp.html
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)