参考文章:

https://blog.csdn.net/tangcaijun/article/details/42110319

首先下载库:

https://www.cryptopp.com/#download

使用vs2017打开cryptest.sln文件,解决方案选择“重订解决方案目标”,升级sdk。

编译库和dll文件

将生成的cryptopp.lib和cryptopp.dll放到项目文件夹,如果单独运行需要将dll文件拷贝到debug文件夹和生成的exe文件放在一起使用。

新建win32 c++控制台程序,工程->配置属性->vc++目录->包含目录,填写cryptopp的目录,需要使用其中的头文件.

编码:

  1. #include "pch.h"
  2. #include <iostream>
  3. #include <fstream>
  4. #include <aes.h>
  5. #include <filters.h>
  6. #include <modes.h>
  7. #include <Windows.h>
  8. #pragma comment(lib, "cryptopp.lib")
  9. using namespace std;
  10. byte key[CryptoPP::AES::DEFAULT_KEYLENGTH], iv[CryptoPP::AES::BLOCKSIZE];
  11. void initKV()
  12. {
  13. memset(key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH);
  14. memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);
  15. // 或者也可以
  16. /*
  17. char tmpK[] = "1234567890123456";
  18. char tmpIV[] = "1234567890123456";
  19. for (int j = 0; j < CryptoPP::AES::DEFAULT_KEYLENGTH; ++j)
  20. {
  21. key[j] = tmpK[j];
  22. }
  23. for (int i = 0; i < CryptoPP::AES::BLOCKSIZE; ++i)
  24. {
  25. iv[i] = tmpIV[i];
  26. }
  27. */
  28. }
  29. string encrypt(string plainText)
  30. {
  31. string cipherText;
  32. //
  33. CryptoPP::AES::Encryption aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
  34. CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);
  35. CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink(cipherText));
  36. stfEncryptor.Put(reinterpret_cast<const unsigned char*>(plainText.c_str()), plainText.length() + 1);
  37. stfEncryptor.MessageEnd();
  38. string cipherTextHex;
  39. for (int i = 0; i < cipherText.size(); i++)
  40. {
  41. char ch[3] = { 0 };
  42. sprintf_s(ch, "%02x", static_cast<byte>(cipherText[i]));
  43. cipherTextHex += ch;
  44. }
  45. return cipherTextHex;
  46. }
  47. void writeCipher(string output)
  48. {
  49. ofstream out("cipher.data");
  50. out.write(output.c_str(), output.length());
  51. out.close();
  52. cout << "writeCipher finish " << endl << endl;
  53. }
  54. string decrypt(string cipherTextHex)
  55. {
  56. string cipherText;
  57. string decryptedText;
  58. int i = 0;
  59. while (true)
  60. {
  61. char c;
  62. int x;
  63. stringstream ss;
  64. ss << hex << cipherTextHex.substr(i, 2).c_str();
  65. ss >> x;
  66. c = (char)x;
  67. cipherText += c;
  68. if (i >= cipherTextHex.length() - 2)break;
  69. i += 2;
  70. }
  71. //
  72. CryptoPP::AES::Decryption aesDecryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
  73. CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption(aesDecryption, iv);
  74. CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink(decryptedText));
  75. stfDecryptor.Put(reinterpret_cast<const unsigned char*>(cipherText.c_str()), cipherText.size());
  76. stfDecryptor.MessageEnd();
  77. return decryptedText;
  78. }
  79. string readCipher()
  80. {
  81. ifstream in("cipher.data");
  82. string line;
  83. string decryptedText;
  84. while (getline(in, line))
  85. {
  86. if (line.length() > 1)
  87. {
  88. decryptedText += decrypt(line) + "\n";
  89. }
  90. line.clear();
  91. }
  92. cout << "readCipher finish " << endl;
  93. in.close();
  94. return decryptedText;
  95. }
  96. int main()
  97. {
  98. string text = "What's up dude!";
  99. cout << "text : " << text << endl;
  100. initKV();
  101. string cipherHex = encrypt(text);
  102. cout << "cipher : " << cipherHex << endl;
  103. writeCipher(cipherHex);
  104. string decrpt_text = readCipher();
  105. cout << "text : " << decrpt_text << endl;
  106. return 0;
  107. }

运行结果:

Windows10 VS2017 C++使用crypto++库加密解密(AES)的更多相关文章

  1. 使用python进行加密解密AES算法

    使用python进行加密解密AES算法-代码分享-PYTHON开发者社区-pythoner.org 使用python进行加密解密AES算法 TY 发布于 2011-09-26 21:36:53,分类: ...

  2. AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用

    一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...

  3. Java对称与非对称加密解密,AES与RSA

    加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么 ...

  4. 加密解密 AES RSA MD5 SHA

    加密解密: 对称加密:加密和解密相同秘钥.常见算法:AES, XTEA, 3DES. 非对称加密: 公钥加密 私钥加密. 加密和解密秘钥不同.常见算法:RSA OpenSSL> genrsa - ...

  5. 使用java实现对称加密解密(AES),非对称加密解密(RSA)

    对称加密:双方采用同样的秘钥进行加密和解密.特点是速度快,但是安全性没有非对称加密高 非对称加密:接收方生成的公有秘钥公布给发送方,发送方使用该公有秘钥加密之后,发送给接收方,然后接收方使用私有秘钥解 ...

  6. C#实现DES加密解密,AES加密解密

    DES算法描述简介: DES是Data Encryption Standard(数据加密标准)的缩写.它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密 ...

  7. C#加密解密(AES)

    using System; namespace Encrypt { public class AESHelper { /// <summary> /// 默认密钥-密钥的长度必须是32 / ...

  8. C#加密解密(AES)-AESHelper

    原文地址:https://ken.io/note/csharp-aesencrypt using System; namespace Encrypt { public class AESHelper ...

  9. C#调用Crypto++库AES ECB CBC加解密

    本文章使用上一篇<C#调用C++类库例子>的项目代码作为Demo.本文中,C#将调用C++的Crypto++库,实现AES的ECB和CBC加解密. 一.下载Crypto 1.进入Crypt ...

随机推荐

  1. DataTable插件报错:Uncaught TypeError: Cannot read property 'style' of undefined

    DataTable插件报错:Uncaught TypeError: Cannot read property 'style' of undefined 原因:table 中定义的列和aoColumns ...

  2. C语言实例:数组与字符串

    数组: #include <stdio.h> #include <stdlib.h> #define ARRAY_SIZE(Array) (sizeof (Array) / s ...

  3. JavaScript 示例

    JavaScript 示例 <html lang="en"> <head> <meta charset="UTF-8"> & ...

  4. [c/c++] programming之路(13)、函数

    一.函数 #include<stdio.h> //stdio.stdlib标准库 #include<stdlib.h> //代码重用, 函数的诞生,C语言主要是函数组成 //写 ...

  5. 论文笔记:Concept Mask: Large-Scale Segmentation from Semantic Concepts

    Concept Mask: Large-Scale Segmentation from Semantic Concepts 2018-08-21 11:16:07 Paper:https://arxi ...

  6. NOI 2017 整数(线段树)

    题意 https://loj.ac/problem/2302 思路 拆分成每个二进制位的加减来考虑,维护那个整数的二进制位.不难发现,进位就是找右边第一个 \(0\) 的位置,并将其赋值为 \(1\) ...

  7. Learning-Python【32】:进程理论基础

    什么是进程 进程就是一个程序在一个数据集上的一次动态执行过程.是用来描述程序执行过程的虚拟概念.进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的.进程一般由 ...

  8. 【Core】.NET Core 部署( Docker + CentOS)

    CentOS 下 Docker安装 使用脚本安装 Docker (1)安装docker  sudo yum install docker (2)启动docker systemctl  start do ...

  9. gitlab备份还原

    断电后gitlab报500错误 查看日志 tail -f /var/log/gitlab/gitlab-rails/production.log ActionView::Template::Error ...

  10. LRU的实现

    https://blog.csdn.net/elricboa/article/details/78847305 未看懂https://zhuanlan.zhihu.com/p/34133067