『Crypto++』——C++ 生态最全面的密码学库

2026/06/08 sec cryptography · cpp · encryption · aes · rsa · sm2 · sm3 · sm4 · opensource 2467 字 · 约 8 分钟 阅读
Crypto++ 是 Wei Dai 维护 30+ 年的成熟 C++ 密码学库,覆盖对称/非对称加密、哈希、数字签名、国密(SM2/3/4)等几乎所有主流密码学算法。

项目简介

Crypto++(又称 cryptopp)是由 Wei Dai 从 1995 年开始维护的开源 C++ 密码学类库,历经 30 年持续迭代,是 C++ 生态中最成熟、最全面的加密算法集合。它几乎包含了所有主流和经典的密码学算法实现,从对称加密、非对称加密、哈希到消息认证码、数字签名、密钥协商,并提供了对国密标准 SM2/SM3/SM4 的原生支持。最新版本 CRYPTOPP_8_9_0 于 2023 年发布。

GitHub 数据

  • 仓库地址: weidai11/cryptopp
  • Stars: 5,465Forks: 1,680
  • License: 公共领域(Public Domain)及部分 Boost 许可
  • 主要语言: C++
  • 版本: CRYPTOPP_8_9_0(2023-10-01)
  • 维护状态: 活跃维护
  • 定位: 免费 C++ 密码学类库,完整加密算法集合

核心功能

  1. 对称加密:AES(128/192/256)、DES/3DES、Blowfish、Twofish、ChaCha20、Camellia、Serpent 等
  2. 非对称加密:RSA、DSA、ECDSA(NIST P-192/256/384/521)、EdDSA(Ed25519)、ElGamal、LUC 等
  3. 哈希函数:SHA-1、SHA-2(224/256/384/512)、SHA-3、BLAKE2、SM3、RIPEMD、Whirlpool 等
  4. 消息认证码(MAC):HMAC、CMAC、Poly1305、VMAC 等
  5. 数字签名:RSA-PSS、DSA、ECDSA、Ed25519、SM2 签名等
  6. 密钥协商:DH、ECDH、MQV、HMQV、SM2 密钥交换
  7. 国密支持:SM2(签名+密钥交换)、SM3(哈希)、SM4(分组密码)
  8. 辅助工具: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++OpenSSLBotanlibsodium
接口语言C++ 原生CC++C
算法全面性最全面全面全面偏现代
国密支持SM2/SM3/SM4有扩展有限
C++ 风格RAII + 模板纯 CC++ 风格C 风格
活跃历史30 年25 年10 年10 年
许可证公共领域Apache 2.0BSD-2ISC
安装复杂度中等
文档完善度中等

参考资料

文档信息

加载评论…