首先下载这个源码,https://cryptopp.com/
这个库其实是一个VS项目,下载解压之后用VS打开它。
我的是VS2017,已经和项目的工具集不匹配了,直接按提示“重新定向解决方案”就行。
打开后出现四个项目,把其中的cryptlib项目生成(右键点击生成即可)。
注意,你这个生成,你看好是debug生成还是release生成。
否则后面debug、release库不匹配会死人的(亲自踩坑)。
在vs2017的这里管理你每个项目生成模式。
生成之后才会有之后需要调用的lib文件。
行了,你这样就算生成lib文件了,这文件在 /Win32/Output/Debug 和 /Win32/Output/Release 也就是说,其他项目就可以调用了。至于怎么调用,这还是有些道道的。
你可以新建一个项目,把这些代码写上:
#include "pch.h"
#include <string>
#include <cstring>
#include <vector>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cryptopp/aes.h>
#include <cryptopp/filters.h>
#include <cryptopp/modes.h>
using namespace std;
using namespace CryptoPP;
byte key[CryptoPP::AES::DEFAULT_KEYLENGTH], iv[CryptoPP::AES::BLOCKSIZE];
void initKV(){
memset(key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH);
memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);
}
string encrypt(string plainText){
string cipherText;
CryptoPP::AES::Encryption aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);
CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink(cipherText));
stfEncryptor.Put(reinterpret_cast<const unsigned char*>(plainText.c_str()), plainText.length() + 1);
stfEncryptor.MessageEnd();
string cipherTextHex;
for (int i = 0; i < cipherText.size(); i++)
{
char ch[3] = { 0 };
sprintf_s(ch, "%02x", static_cast<byte>(cipherText[i]));
cipherTextHex += ch;
}
return cipherTextHex;
}
int main() {
string text = "mother fucker, I can finally work you out!";
cout << "text : " << text << endl;
initKV();
string cipherHex = encrypt(text);
cout << "cipher : " << cipherHex << endl;
}
写上之后你会发现#include <crypto...>的都还不能找得到。
你可以:
1.在VS 的include目录中拷贝进去这个项目。
这个目录在哪里? 例如:D:\My VS\VC\Tools\MSVC\14.16.27023\include
或者
2.设置项目属性这里,加入这个项目所在位置。
这样,include的问题解决了,这表明你可以include这些文件进来了。
但是编译还需要链接库文件,所以还需要搞一下库文件。
所需要的库文件是cryptlib.lib。
如果你debug模式,你需要在找debug的lib;你用release模式,你要找release的lib。
方法还是两种了
1.把从网上下载的crypto中win32/Output/Debug(当然或者是release)拷贝到你的VS连接库中。
VS编译过程中动态链接库的位置,这位置是x86的:
D:\My VS\VC\Tools\MSVC\14.16.27023\lib\x86
或者
2.还是项目属性里面连接器里面,加入需要的lib的目录。
在这里我还是要提醒,你看好你是debug还是release!!!
否则会出现_ITERATOR_DEBUG_LEVEL不匹配的错误。(亲自踩坑。)
可以参考:https://blog.csdn.net/y601500359/article/details/85629401
如果你出现这个错误:
说明你的调试的线程模式和runtime lib不一样。你看清楚他的提示,改一下你项目的这个:
就可以了。
另:如果说你出现LINK 2001的错误,那说明编译的时候找不到lib,说明你添加的目录错误。(亲自踩坑。)
如果还有VS的操作什么不明白,可以参考VS添加lib和文件的操作:
https://blog.csdn.net/Xminyang/article/details/80853422
接下来就可以运行了。