本文讲解c++实现AES加密解密功能,主要包含两部分:

  • 实现AES加密解密功能的静态库
  • 实现调用静态库的测试文件

本文代码是在win10系统,VS2013下调试。

一、AES加解密静态库

  1. 创建静态库工程CAesLib
  2. 创建外部调用类CAes256
#ifndef ENCRYPT_DECRYPT_H
#define ENCRYPT_DECRYPT_H
#include <string>using namespace std;class CAes256
{public:CAes256();static void initAes(const string& key = "");static string encryptData(const string& dataIn);static string decryptData(const string& dataIn);static string encryptDataWithHead(const string& dataIn);static string decryptDataWithHead(const string& dataIn);
};#endif // ENCRYPT_DECRYPT_H#include "stdafx.h"
#include "encrypt_decrypt.h"
#include "AES.h"
#include <string.h>
#include <stdio.h>typedef unsigned char UINT8;UINT8 gAesKey[32] = { -84, 115, -48, 61, 3, 127, 34, 37, -73, -21, 85, 100, -4, 117, 63, 19 }; bool gInitFlag = false;CAes256::CAes256()
{}/**AES初始化
*/
void CAes256::initAes(const string& key)  // key的长度为16位
{if (key != ""){memset(gAesKey, 0x00, 32);memcpy_s(gAesKey, 16, key.c_str(), 16);}aesInit(gAesKey);
}/**加密字符串
*/
string CAes256::encryptData(const string& dataIn)
{if (!gInitFlag){gInitFlag = true;initAes("1234567890123456");}return aesBlockEncrypt(dataIn);
}/**解密字符串
*/
string CAes256::decryptData(const string& dataIn)
{if (!gInitFlag){gInitFlag = true;initAes("1234567890123456");}return aesBlockDecrypt(dataIn);
}string CAes256::encryptDataWithHead(const string& dataIn)
{if (!gInitFlag){gInitFlag = true;initAes("");}return aesBlockEncryptWithHead(dataIn);
}string CAes256::decryptDataWithHead(const string& dataIn)
{if (!gInitFlag){gInitFlag = true;initAes("");}return aesBlockDecryptWithHead(dataIn);
}
  1. 编译生成静态库

二、调用静态库测试代码

测试代码如下:

// TestAesLib.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <iostream>
#include "encrypt_decrypt.h"using namespace std;#pragma comment(lib, "..\\..\\CAesLib\\Release\\CAesLib.lib")int _tmain(int argc, _TCHAR* argv[])
{//设置key,长度为16位CAes256::initAes("t7CLWhtUTAgAFbw0");string str = "“TestAesLib.exe”(Win32):  已加载“\\TestAesLib\\Release\\TestAesLib.exe”。已加载符号。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\ntdll.dll”。无法查找或打开 PDB 文件。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\kernel32.dll”。无法查找或打开 PDB 文件。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\KernelBase.dll”。无法查找或打开 PDB 文件。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\msvcr120.dll”。无法查找或打开 PDB 文件。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\msvcp120.dll”。无法查找或打开 PDB 文件。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\sechost.dll”。无法查找或打开 PDB 文件。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\rpcrt4.dll”。无法查找或打开 PDB 文件。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\sspicli.dll”。无法查找或打开 PDB 文件。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\cryptbase.dll”。无法查找或打开 PDB 文件。\“TestAesLib.exe”(Win32) : 已加载“C : \\Windows\\SysWOW64\\bcryptprimitives.dll”。无法查找或打开 PDB 文件。";cout << "str = " << str << endl;string enstr = CAes256::encryptData(str);cout << "1------------------enstr = " << enstr << endl;str = CAes256::decryptData(enstr);cout << "2------------------str = " << str << endl;enstr = CAes256::encryptDataWithHead(str);cout << "1------------------enstr = " << enstr << endl;str = CAes256::decryptDataWithHead(enstr);cout << "2------------------str = " << str << endl;system("pause");return 0;
}

运行结果:

重要说明:

  • CAes256类里面的函数都是静态函数,不用定义对象,可以通过CAes256::方式访问
  • 可以通过CAes256::initAes设置key,如果不设置就会使用默认的key
  • 默认的key通过UINT8 gAesKey[32]来设置
  • encryptData和decryptData是常规的数据加解密处理,可以和其它语言(如java)相互加解密
  • encryptDataWithHead和decryptDataWithHead处理时,在加密时,会把源数据的长度转换成8位长度的16进制字符串,再把字符串加附加到源数据前面;解密时要出去8位长度的数据头再做解密处理

三、源码路径

本文源码

c++实现AES加密解密算法相关推荐

  1. AES加密解密算法Java实现

    AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

  2. AES加密解密算法的C代码实现

     AES 加密解密的原理我就不说了, 弟兄们自己上百度去查, 文章很多. 我这里只列出从网上获取的代码的实现, 我修改了一些, 可以很方便的使用到你的代码里面. AES 比DES算法的强度更强.A ...

  3. php aes解密中文,PHP AES加密解密算法

    //--------第四种AES加密/解密方案 CBC模式,128-bit-------- /* * 实现AES加密 * $str : 要加密的字符串 * $keys : 加密密钥 * $iv : 加 ...

  4. AES加密解密算法设计(C++)

    目 录 1. 背景与意义 4 2. 系统设计 5 2.1系统主要目标 5 2.2主要软件需求(运行环境) 5 2.3功能模块与系统结构 6 3 系统功能程序设计 8 3.1基本要求部分 8 3.1.1 ...

  5. java aes128加密解密_java AES 128 位加密解密算法

    最近在做app后台的服务器,使用到AES加密解密算法,无奈网上的都不符合要求,于是自己借鉴着写了一个AES加密解密工具. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥 ...

  6. android、ios、php之间AES加密解密

    使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...

  7. 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )

    文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...

  8. 【Android工具】DES终结者加密时报——AES加密演算法

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...

  9. 理解AES加密解密的使用方法

    很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...

最新文章

  1. C#版 - Leetcode49 - 字母异位词分组 - 题解
  2. php 如何把u5fb,php如何将json中的unicode编码转为汉字?
  3. 第九讲 二阶齐次常系数线性ODE
  4. mfc在两个控件间连线
  5. Sumdiv POJ - 1845
  6. 前端学习(487):css选择器下
  7. 性能测试概念点分析与过程讲解(三)
  8. 【matlab】访问元胞数组
  9. Pod install 慢, pod update 慢, Cocoapods setup下载缓慢,手动解决方案
  10. HeadFirst 设计模式 笔记
  11. 时频分析matlab实例,Matlab时频分析工具箱及仿真案例
  12. 累计独立访客(UV)不低于 1000 是什么意思,快速开通流量主
  13. 51单片机60秒倒计时 数码管显示
  14. 技术团队绩效考核怎么搞?详解OKR、MBO、KPI、BSC
  15. UVa Problem 10310 Dog and Gopher (狗拿地鼠)
  16. C. Divan and bitwise operations
  17. SQL语句group by 的求和sum
  18. 复选框的全选、全不选、和获取选中的值;
  19. 王者服务器维修2019年四月份,王者荣耀2019年4月新皮肤有哪些?4月新皮肤什么时候出...
  20. canvas 画一条波浪线 进度条

热门文章

  1. 在个人网站中加入二次元角色
  2. 宝塔面板7.9.9企业版_开心版一键脚本
  3. 31 - 买股票的最佳时机问题
  4. 如何排查问题--服务端
  5. fluentd tail mysql_使用fluentd实现实时收集日志文件
  6. 漫谈 HTTP 连接
  7. Java SE 基础概述(一)
  8. 数学表达式魔训_day3
  9. R语言——summarise和mutate函数
  10. 第三篇:如何精准表达,高效沟通