Crypto++库在VS 2013中的使用 + 基于操作模式AES加密

本文介绍了如何在Visual Studio 2013中使用Crypto++ Library进行AES加密。首先,从官方网站下载Crypto++源码,编译生成cryptlib.lib文件。接着创建Crypto++ SDK,包含头文件和库文件。然后,创建一个新的Win32 Console Application工程,编写AES加密的源码,并配置工程属性,包括添加额外的包含目录、库目录以及设置运行时库。最后,通过设置确保程序能够正确链接并运行,实现基于模式的AES加解密功能。
摘要由CSDN通过智能技术生成

一.   下载Crypto++ Library

Crypto++ Library的官方网:http://www.cryptopp.com/

 

二.   建立自己使用的Crypto++ Library

由于从官方网下载的Crypto++库是开源的,只有源文件和几个可以生成lib、dll的工程,以及一个使用的例子工程,因此希望生成自己建的工程能使用的SDK。

 

1.编译链接生成cryptlib.lib

打开cryptest.sln,分别在Debug模式和Release模式下编译链接cryptlib工程,成功后会在cryptopp54\Win32\output\debug和cryptopp54\Win32\output\release下生成cryptlib.lib文件。作者当时用的是Crypto++ 5.62版本。

Build时方法是,右击Solution Explorer中的cryptlib工程,单击build。第一次时它会报错,没关系,按这样再build一次,就可以build成功了。

2.  建立Crypto++ SDK

在C:\Program Files\中新建文件夹,取名“CryptoPP”,里面新建文件夹“include”、“lib”,在“lib”中新建文件夹“debug”、“release”。将Crypto++库中的所有头文件复制到“include”文件夹中,再将上面生成的两个cryptlib.lib分别复制到“debug”和“release”中。


三.  基于模式的AES加解密

1、20/13中新建Win32 Console Application工程,建立空的工程。完成后新建文件main.cpp,里面源码如下:

#include "stdafx.h"
#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()<=AES::MAX_KEYLENGTH?memcpy(key,sKey.c_str(),sKey.size()):memcpy(key,sKey.c_str(),AES::MAX_KEYLENGTH);  
          
    ECB_Mode<AES >::Decryption ecbDecryption((byte *)key, AES::MAX_KEYLENGTH);  
          
    HexDecoder decryptor(new StreamTransformationFilter(ecbDecryption, new StringSink(outstr)));  
    decryptor.Put((byte *)cipherText, strlen(cipherText));  
    decrypt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值