crypto++加密算法库的编译和在项目中的使用

本文介绍了Crypto++ Library,一个免费的C++加密库,包括其最新版本、编译步骤以及如何在Windows环境下使用Visual Studio将编译后的库集成到项目中,涉及配置附加包含目录、运行库和附加库目录等关键步骤。
摘要由CSDN通过智能技术生成

简述

Crypto ++ Library是一个免费的C ++类加密方案库。该库包含以下算法:

算法 名称
认证的加密方案 GCM,CCM,EAX
高速流密码 ChaCha (8/12/20), Panama, Sosemanuk, Salsa20 (8/12/20), XSalsa20
AES AES (Rijndael), RC6, MARS, Twofish, Serpent, CAST-256
其他分组密码 ARIA,IDEA,Blowfish,Triple-DES(DES-EDE2和DES-EDE3), Camellia,SEED,Kalyna(128/256/512),RC5,SIMON(64/128),SPECK(64/128),SM4,Threefish(256/512/1024),Skipjack,SHACAL-2,TEA,XTEA
分组密码模式的操作 ECB, CBC, CBC ciphertext stealing (CTS), CFB, OFB, counter mode (CTR)
消息认证码 BLAKE2b and BLAKE2s, CMAC, CBC-MAC, DMAC, GMAC (GCM), HMAC, Poly1305, SipHash, Two-Track-MAC, VMAC
散列函数 BLAKE2b and BLAKE2s, Keccack (F1600), SHA-1, SHA-2, SHA-3, Poly1305, SipHash, Tiger, RIPEMD (128, 256, 160, 320), SM3, WHIRLPOOL
公钥密码学 RSA, DSA, Determinsitic DSA (RFC 6979), ElGamal, Nyberg-Rueppel (NR), Rabin-Williams (RW), EC-based German Digital Signature (ECGDSA), LUC, LUCELG, DLIES (variants of DHAES), ESIGN
公钥系统的填充方案 PKCS#1 v2.0, OAEP, PSS, PSSR, IEEE P1363 EMSA2 and EMSA5
重要协议计划 Diffie-Hellman (DH), Unified Diffie-Hellman (DH2), Menezes-Qu-Vanstone (MQV), Hashed MQV (HMQV), Fully Hashed MQV (FHMQV), LUCDIF, XTR-DH
椭圆曲线密码学 ECDSA, Determinsitic ECDSA (RFC 6979), ECGDSA, ECNR, ECIES, ECDH, ECMQV
为保持向后兼容性和历史价值而保留不安全或过时的算法 MD2, MD4, MD5, Panama Hash, DES, ARC4, SEAL 3.0, WAKE-OFB, DESX (DES-XEX3), RC2, SAFER, 3-WAY, GOST, SHARK, CAST-128, Square

截至到我撰写本文的日期2018/03/05为止,该算法库的最新版本是crypto++6.10
官网链接:https://www.cryptopp.com/

编译

解压文件夹后,在windows下使用vs打开其中的.sln文件,可以在解决方案中看到四个项目工程,分别为cryptest、cryptlib、cryptopp、dlltest。
将编译模式设置为release,然后版本分别选择x86和x64,然后执行如下操作:
清理解决方案 -> 重新生成解决方案。
编译完成后,在子目录下生成Win32和x64两个文件夹,分别对应32位和64位版本的链接库。文件夹下有一个名为output的文件夹其中包含了crypttest.exe,cryptlib.lib,cryptlib.pdb三个文件。

crypttest.exe用于测试编译结果,我在使用该程序测试时发现示例输入文件有打不开而导致测试中断的情况,但是并不影响最终使用,这个文件删掉也可以。
cryptlib.lib是自己写的项目要链接的外部依赖库。
cryptlib.pdb用于收集调试信息。

在项目中使用

以debug模式的配置为例,在vs中新建一个空项目,然后作如下配置:
C/C++->常规->附加包含目录:C:\cryptopp610
C/C++->代码生成->运行库:MTD
连接器->常规->附加库目录:C:\cryptopp610\x64\Output\Debug
release模式的配置如上把,只不过把MTD换成MT,然后附加库目录改为Win32\Output\Release

然后在编写代码时,在文件开头加载外部依赖库,使用指令:

#pragma comment(lib, "cryptlib.lib" )

示例代码:

#include <aes.h>  
#include <Hex.h>      // StreamTransformationFilter  
#include <modes.h>    // CFB_Mode  
#include <iostream>   // std:cerr    
#include <sstream>   // std::stringstream    
#include <string>  

using namespace std;
using namespace CryptoPP;
#pragma comment(lib, "cryptlib.lib" )  

std::string ECB_AESEncryptStr(std::string sKey, const char *plainText)
{
    std::string outstr;

    //填key    
    SecByteBlock key(AES::MAX_KEYLENGTH);
    memset(key, 0x30, key.size());
    sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);


    AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);

    ECB_Mode_ExternalCipher::Encryption ecbEncryption(aesEncryption);
    StreamTransformationFilter ecbEncryptor(ecbEncryption, new HexEncoder(new StringSink(outstr)));
    ecbEncryptor.Put((byte *)plainText, strlen(plainText));
    ecbEncryptor.MessageEnd();

    return outstr;
}

std::string ECB_AESDecryptStr(std::string sKey, const char *cipherText)
{
    std::string outstr;

    //填key    
    SecByteBlock key(AES::MAX_KEYLENGTH);
    memset(key, 0x30, key.size());
    sKey.size() <=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值