C++ 调用 Crypto++ 库
首先 Yonggie的博客
https://blog.csdn.net/Yonggie/article/details/100592532
其次感谢 Xminyang的博客
https://blog.csdn.net/Xminyang/article/details/80853422
我是参考这两篇文章的,毕竟自己是一个小白,话不多说。
哪里下载库文件
编译下载的程序
下载好库文件,解压成功,打开文件,会有许多文件,不必惊慌找到.sln文件。
我这里是用vs2010编译的,因为我是用vs2010写程序的,我觉得这里可能涉及到编译器的平台工具集。
(这里我也只是猜测,感觉最好是你要用哪个版本的VS,你在编译这个库文件的时候就用对应版本的编译器)
打开之后,应该如下图
我们选中第三个项目即可,右键重写生成,需要注意的是,我这里是在Debug模式下(具体原因请参考本文章上面的
第一个链接)。
编译成功之后,打开Win32 -> Output -> Debug 目录,会有一个cryptlib.lib文件(我这里只是生成了一个文件喔)
新建一个项目并调用库文件
新建一个项目 下面是.cpp代码,这也是借鉴Yonggie的文章(再次感谢),这里的程序含义我现在还不知道。
#include "pch.h"
#include <string>
#include <cstring>
#include <vector>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cryptopp/aes.h> // #include <aes.h> 这三个文件我是这么写的
#include <cryptopp/filters.h> // #include <filters.h>
#include <cryptopp/modes.h> // #include <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;
}
此时这样编译是会失败的,还需要进行的工作如下,提供.h .cpp 文件的位置,我这里是将下载的文件都拷贝到自己项目下的
HFile文件夹中了。
这四个文件不需要,红线下面的文件都拷贝
下图是我自己项目的目录,我把拷贝的所有文件都放到了HFile文件夹下了
接下还要进行的工作是添加cryptlib.lib文件(上面有提到喔)
链接器-输入-附加依赖项(cryptlib.lib文件名,其实就是cryptlib.lib) 以及 链接器-常规-附加库目录(cryptlib.lib文件所在的目录)
你可以将cryptlib.lib文件(Win32 -> Output -> Debug目录下)拷贝到自己的项目下,就像上面文件的操作。
最后需要更改一下 C/C++ - 代码生成 - 运行库,修改成和下载的库文件一样就行,或者四个都试一下也行。
输出结果
看来老哥很暴躁啊,不过这正是我想说的。
最后说明
我只是参考Yonggie的博客,并且将他所提供的文件成功的编译出来了。对于代码的内容还没有了解,只是走到程序不会报错的
阶段而已,后续我还是会继续研究这个Crypto++ 库文件的使用方法的。
如果你按照上述的方法还是没有成功,那么只能祝你好运。