c++实现AES加密解密算法
本文讲解c++实现AES加密解密功能,主要包含两部分:
- 实现AES加密解密功能的静态库
- 实现调用静态库的测试文件
本文代码是在win10系统,VS2013下调试。
一、AES加解密静态库
- 创建静态库工程CAesLib
- 创建外部调用类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);
}
- 编译生成静态库
二、调用静态库测试代码
测试代码如下:
// 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加密解密算法相关推荐
- AES加密解密算法Java实现
AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...
- AES加密解密算法的C代码实现
AES 加密解密的原理我就不说了, 弟兄们自己上百度去查, 文章很多. 我这里只列出从网上获取的代码的实现, 我修改了一些, 可以很方便的使用到你的代码里面. AES 比DES算法的强度更强.A ...
- php aes解密中文,PHP AES加密解密算法
//--------第四种AES加密/解密方案 CBC模式,128-bit-------- /* * 实现AES加密 * $str : 要加密的字符串 * $keys : 加密密钥 * $iv : 加 ...
- AES加密解密算法设计(C++)
目 录 1. 背景与意义 4 2. 系统设计 5 2.1系统主要目标 5 2.2主要软件需求(运行环境) 5 2.3功能模块与系统结构 6 3 系统功能程序设计 8 3.1基本要求部分 8 3.1.1 ...
- java aes128加密解密_java AES 128 位加密解密算法
最近在做app后台的服务器,使用到AES加密解密算法,无奈网上的都不符合要求,于是自己借鉴着写了一个AES加密解密工具. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥 ...
- android、ios、php之间AES加密解密
使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...
- 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )
文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...
- 【Android工具】DES终结者加密时报——AES加密演算法
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...
- 理解AES加密解密的使用方法
很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...
最新文章
- C#版 - Leetcode49 - 字母异位词分组 - 题解
- php 如何把u5fb,php如何将json中的unicode编码转为汉字?
- 第九讲 二阶齐次常系数线性ODE
- mfc在两个控件间连线
- Sumdiv POJ - 1845
- 前端学习(487):css选择器下
- 性能测试概念点分析与过程讲解(三)
- 【matlab】访问元胞数组
- Pod install 慢, pod update 慢, Cocoapods setup下载缓慢,手动解决方案
- HeadFirst 设计模式 笔记
- 时频分析matlab实例,Matlab时频分析工具箱及仿真案例
- 累计独立访客(UV)不低于 1000 是什么意思,快速开通流量主
- 51单片机60秒倒计时 数码管显示
- 技术团队绩效考核怎么搞?详解OKR、MBO、KPI、BSC
- UVa Problem 10310 Dog and Gopher (狗拿地鼠)
- C. Divan and bitwise operations
- SQL语句group by 的求和sum
- 复选框的全选、全不选、和获取选中的值;
- 王者服务器维修2019年四月份,王者荣耀2019年4月新皮肤有哪些?4月新皮肤什么时候出...
- canvas 画一条波浪线 进度条