欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ 调用 Crypto++ 库

程序员文章站 2022-03-22 14:44:04
...

首先 Yonggie的博客

https://blog.csdn.net/Yonggie/article/details/100592532 

其次感谢 Xminyang的博客

https://blog.csdn.net/Xminyang/article/details/80853422

我是参考这两篇文章的,毕竟自己是一个小白,话不多说。

 

哪里下载库文件

https://cryptopp.com/

 

编译下载的程序

下载好库文件,解压成功,打开文件,会有许多文件,不必惊慌找到.sln文件。

C++ 调用 Crypto++ 库

我这里是用vs2010编译的,因为我是用vs2010写程序的,我觉得这里可能涉及到编译器的平台工具集。

(这里我也只是猜测,感觉最好是你要用哪个版本的VS,你在编译这个库文件的时候就用对应版本的编译器)

C++ 调用 Crypto++ 库

 

打开之后,应该如下图

C++ 调用 Crypto++ 库

我们选中第三个项目即可,右键重写生成,需要注意的是,我这里是在Debug模式下(具体原因请参考本文章上面的

第一个链接)。

 

编译成功之后,打开Win32 -> Output -> Debug  目录,会有一个cryptlib.lib文件(我这里只是生成了一个文件喔)

C++ 调用 Crypto++ 库

 

新建一个项目并调用库文件

 

新建一个项目 下面是.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文件夹中了。

C++ 调用 Crypto++ 库

 这四个文件不需要,红线下面的文件都拷贝

C++ 调用 Crypto++ 库 

下图是我自己项目的目录,我把拷贝的所有文件都放到了HFile文件夹下了

C++ 调用 Crypto++ 库

 

接下还要进行的工作是添加cryptlib.lib文件(上面有提到喔)

C++ 调用 Crypto++ 库

链接器-输入-附加依赖项(cryptlib.lib文件名,其实就是cryptlib.lib)  以及   链接器-常规-附加库目录(cryptlib.lib文件所在的目录)

你可以将cryptlib.lib文件(Win32 -> Output -> Debug目录下)拷贝到自己的项目下,就像上面文件的操作。

 

最后需要更改一下 C/C++ -  代码生成 - 运行库,修改成和下载的库文件一样就行,或者四个都试一下也行。

 

输出结果

C++ 调用 Crypto++ 库

看来老哥很暴躁啊,不过这正是我想说的。

 

最后说明

我只是参考Yonggie的博客,并且将他所提供的文件成功的编译出来了。对于代码的内容还没有了解,只是走到程序不会报错的

阶段而已,后续我还是会继续研究这个Crypto++ 库文件的使用方法的。

如果你按照上述的方法还是没有成功,那么只能祝你好运。

相关标签: visual studio