crypto++ 在visual studio的使用 --来自菜鸟的哭喊

 

首先下载这个源码,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

 

接下来就可以运行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值