本文主要介绍 AES 算法的加解密方法。本文使用的语言为 C++,调用的 AES 库为:cryptopp。

1 概述
AES 加密算法的介绍如下(摘自 WikiPedia):

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,AES 已然成为对称密钥加密中最流行的算法之一。

该算法为比利时密码学家 Joan Daemen 和 Vincent Rijmen 所设计,结合两位作者的名字,以 Rijndael 为名投稿高级加密标准的甄选流程。

2 cryptopp安装
cryptopp:Crypto++ Library is a free C++ class library of cryptographic schemes.

C++头文件GitHub地址:https://github.com/weidai11/cryptopp

C++头文件官方网站: https://cryptopp.com/

3 示例代码
本节介绍在 ECB 模式、16字节长度的 key、PKCS7填充方式的场景下,使用 AES 算法进行加解密的示例代码。

示例代码(aes_test1.cpp)如下:

#include <iostream>
#include <string>
#include "hex.h"
#include "aes.h"
#include "modes.h"using namespace CryptoPP;
using namespace std;int main(int argc, char* argv[])
{// use default key length 16 bytesbyte key[AES::DEFAULT_KEYLENGTH] = "abcd1234";// string to be encryptedstring strPlain = "ECB Mode Test";// cipher stringstring strCipher;// encoded stringstring strEncoded;// recovered string, should be same with strPlainstring strRecovered;try{cout << "key is: " << key << endl;cout << "plain is: " << strPlain << endl;// encrypt with ECB modeECB_Mode< AES >::Encryption e;e.SetKey(key, sizeof(key));// encrypt here// The StreamTransformationFilter adds padding as required, use PKCS_PADDING(PKCS7Padding) default.// ECB and CBC Mode must be padded to the block size of the cipher.StringSource(strPlain, true, new StreamTransformationFilter(e,new StringSink(strCipher) // StringSink) // StreamTransformationFilter); // StringSource}catch (const Exception& e){cerr << e.what() << endl;exit(1);}// print cipher stringstrEncoded.clear();StringSource(strCipher, true,new HexEncoder( new StringSink(strEncoded) // StringSink) // HexEncoder); // StringSourcecout << "cipher is: " << strEncoded << endl;try{// decrypt with ECB modeECB_Mode< AES >::Decryption d;d.SetKey(key, sizeof(key));// The StreamTransformationFilter removes padding as required.StringSource s(strCipher, true, new StreamTransformationFilter(d,new StringSink(strRecovered) // StringSink) // StreamTransformationFilter); // StringSourcecout << "recovered string is: " << strRecovered << endl;}catch(const Exception& e){cerr << e.what() << endl;exit(1);}return 0;
}

编译并执行上述代码,结果如下:

在上述结果中可以看到,我们通过调用接口,完成了 AES 算法的加解密操作。

说明:我们可以通过对比“示例代码的加密结果”和“网上一些在线 aes 加解密网站的加密结果”,来验证我们的加密操作是否正确:http://tool.chacuo.net/cryptaes。

C++或C 实现AES ECB模式加密解密,支持官方验证相关推荐

  1. php实现aes ecb模式加密,PHP、Python、Java的AES ECB加密实现-Fun言

    AES加密 ECB模式 PKCS5填充 128位密码/密码块 ECB模式是将明文按照固定大小的块进行加密的,块大小不足则进行填充,ECB模式没有用到向量. 具体加密算法,请参见米扑博客总结的系列文章: ...

  2. go、JS AES(CBC模式)加密解密兼容

    js 代码: <!DOCTYPE html>   <html lang="en">   <head>       <meta charse ...

  3. Python base64 + AES EBC模式加密

    """ 先进行Base64加密,再进行AES ecb模式加密:EBC 模式需要补全 """ ''' ECB模式补足16位 ''' def a ...

  4. golang实现AES ECB模式的加密和解密

    最近有一个需求需要在golang中实现AES ECB模式的加密和解密,  看了一下官方文档和相关资料发现golang 官方包并没有完善的实现,于是自己尝试写了一个,本文中的AES算法是基于ECB模式, ...

  5. java aes cfb 256_aes加密解密源码,包括aes128、aes192、aes256位,以及cbc、cfb、ecb、ofb、pcbc模式...

    AES加解密总共有以下这些 算法/模式/填充                 字节加密后数据长度       不满16字节加密后长度 AES/CBC/NoPadding                 ...

  6. aesecbpkcs5 php_php AES/ECB/PKCS5Padding加密

    AES/ECB/PKCS5Padding加密 error_reporting(E_ALL^E_NOTICE^E_WARNING);//此句要加上,否则会报php错误当iv位空时 class encry ...

  7. python aes加密 cbc_【转载】python AES CBC模式加密

    今天需要用到AES CBC模式加密,搜索了很久,终于加密成功,记录一下今天的理解. 首先要安装pycrypto库,不知道为什么在windows安装失败,在linux可以正常安装 这里有几点要注意,ke ...

  8. angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现

    今天实现了下AES和RSA加密解密,主要的功能是对前后端交互数据进行加密解密,为什么要用到两个算法呢,首先RSA默认的话加密长度是有限的100多个byte吧大约,并且需要公钥私钥,而AES加密没有限制 ...

  9. Vue前端和Java后端 联调使用AES 前后端加密解密

    Vue前端和Java后端 联调使用AES 前后端加密解密 最近在项目中需要针对重要数据进行加密传输,在网上找了一大推加密方式 最终采用AES 加密 Java端 package com.zk.web.u ...

最新文章

  1. OSChina 周三乱弹 ——我求婚,你敢答应吗
  2. linux系统启动流程详解
  3. 【Hello CC.NET】巧用模板简化配置
  4. 别人家SDK的设计模式——Android Retrofit库源码解读
  5. linux以16进制查看文件
  6. AtCoder Beginner Contest 176总结
  7. 从0开始学习自动化测试框架cypress(一)
  8. 林家栋这三十年:深获万梓良、刘德华赏识,靠配角成为影帝
  9. 计算机自我检测方法,电脑问题的自我检测方法有哪些?
  10. 使用PS更改照片的背景色
  11. [高项]管理沟通VS控制沟通
  12. 【论文笔记】Contextual Diversity for Active Learning(ECCV2020)
  13. tween.js 中文使用指南 1
  14. 计算机如何连接iphone,iphone怎么连接到电脑的方法详解【图文】
  15. matlab 读取bin文件显示图片
  16. Python基础+进阶(万字总结,基础案例+执行结果)
  17. Injected script—web 自动化测试技术原理解析,以TestCafe为例
  18. 阿里云推出“通达云OA”办公系统 基于钉钉的移动OA应用...
  19. java常见的面试题
  20. Windows中mysql使用命令行登录

热门文章

  1. 第一家云创大数据产业学院在佛山职业技术学院挂牌
  2. 二十多岁不信,三十多岁却深信不疑的道理
  3. 类似索引Model套Model之 iOS模型闲聊二
  4. http缓存机制之304状态码
  5. 第 二 十 八 天 :LB 负 载 均 衡 搭 建 之 LVS
  6. 再战“超融合”,戴尔、Nutanix绝世好CP
  7. C#_MVC_ajax for form
  8. 失败创业者的告白:初创团队应有一位绝对领导者
  9. 关于多线程编程您不知道的 5 件事 有关高性能线程处理的微妙之处
  10. pycharm 安装 jupyter