C++ 调用 Crypto++ 库

首先 Yonggie的博客

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

其次感谢 Xminyang的博客

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

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

 

哪里下载库文件

https://cryptopp.com/

 

编译下载的程序

下载好库文件,解压成功,打开文件,会有许多文件,不必惊慌找到.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++ 库文件的使用方法的。

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值