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

本文主要介绍 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 加解密网站的加密结果”,来验证我们的加密操作是否正确:在线AES加密解密、AES在线加密解密、AES encryption and decryption--查错网。

任何程序错误,以及技术疑问或需要解答的,请添加

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kali Linux 2019.4用U盘安装以及解决Kali Linux 2019.4中文乱码问题

一、利用Win32 Disk Imager 实现U盘刻录ISO 1.Kali Linux官网下载 2.Win32 Disk Imager官网下载地址 3.打开Win32 Disk Imager软件&#xff0c;添加下载的镜像文件&#xff0c;选择制作镜像的U盘&#xff0c;点击“”“写入”&#xff0c;等待写入成功完成&#xff01; 二、…

Javascript实现AES加密解密(ECB/CBC)

环境配置 js文件https://code.google.com/archive/p/crypto-js/downloads在线AES加密解密地址在线AES加密解密、AES在线加密解密、AES encryption and decryption--查错网下载完成后在页面中引入 rollups/aes.jscomponents/mode-ecb.jscomponents/pad-nopadding.js引入后页面 …

在PHP中利用wsdl创建标准webservice

参照整理&#xff1a; http://bbs.php100.com/read-htm-tid-95228.htmlhttp://www.ieliwb.com/wsdl-create-soapdiscovery/ 说明&#xff1a; 非标准的webservice&#xff0c;可能只能PHP才能访问 标准的webservice&#xff0c;就必须要使用wsdl在这里我只介绍标准的webserv…

Kali-Linux2019.04设置中文输入法

1.打开超级终端&#xff0c;输入 apt-get install fcitx 首先安装输入法框架 2.输入apt-get install fcitx-googlepinyin 然后安装google输入法 3.如下图&#xff0c;打开fcitx输入法配置 4.通过左下角的“”“”添加&#xff0c;选择刚才安装的google中文输入法&#xff0c…

C语言实现AES加密解密

AES加密是美国联邦政府采用的一种块加密标准&#xff0c;如今已经被全世界广为使用。嵌入式开发中我们也经常会用到加密解密算法&#xff0c;如果没有硬件模块来实现&#xff0c;就需要用到C代码软件实现。下面介绍调用mbedTLS中的AES加密解密函数实现AES算法。 mbedTLS是一个…

react-native绑定优酷SDK-附效果图和源码

ReactNative绑定优酷SDK需要用到两部分知识&#xff1a; 优酷本身的sdk绑定&#xff1b;RN与原生界面的交互&#xff1b; 效果&#xff1a; RN版本&#xff1a;0.49.3 代码更新日期&#xff1a;2017.10.26 下文也根据绑定需要分为两部分&#xff1a; 一、优酷sdk绑定&#…

我的nginx iis 负载均衡学习(环境搭建)

1&#xff0c;下载并安装nginx 比较简单 2&#xff0c;进行网站的配置 我使用了我的IIS 站点中已经拥有的两个站点 3&#xff0c;进行nginx 的配置 配置如下&#xff1a; 在server 节点之前添加如下的配置&#xff1a; upstream www.dalong.com { server 127.0.0.1; …

Kali-Linux-2019.04虚拟机与物理机实现复制粘贴功能

**1.打开虚拟机VM15&#xff0c;启动进入Kali系统&#xff0c;在虚拟机菜单栏&#xff0c;“虚拟机”->安装VMware Tool&#xff0c;弹出框选择“是”。*在Kali系统桌面出现光盘状态的VMware Tool。 1.在超级终端内操作 cd /media/cdrom0 2.复制VMwareTools文件到tmp目录&…

宝塔LNMP使用步骤nginx+php 7.2

安装BT面板 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh 安装LAMP / LNMP 推荐 PHP7.3(最低要求7.0) MySQL5.7(最低要求5.5) PHP 5.6.x即将停止安全支持 面板新建网站 进入面板, 网站, 新建…

react-native多图选择、图片裁剪(支持ad/ios图片个数控制)

前言&#xff1a; 目前关于rn比较知名并且封装好的图片选择控件很多&#xff0c;不过能同时支持多图片上传&#xff0c;个数控制兼容iOS/Ad的却寥寥无几&#xff0c;而今天介绍的这款框架可以实现&#xff1a;图片裁剪、最大图片个数限制、拍照、本地相册等功能。 效果&#x…

QT5主界面“关闭窗口”按钮设置弹出提示询问信息

QT5主界面为“关闭窗体”按钮和其action添加关闭窗口事件&#xff0c;可以询问是否退出 1.在信号与槽函数中&#xff0c;actQuit关联信号与槽函数&#xff0c;如下&#xff1a; 2.在mainwindow.h文件MainWindow类中添加关闭窗口事件closeEvent 3.在mainwindow.cpp文件添加vo…

Pytorch torchvision完成Faster-rcnn目标检测demo及源码详解

Torchvision更新到0.3.0后支持了更多的功能&#xff0c;其中新增模块detection中实现了整个faster-rcnn的功能。本博客主要讲述如何通过torchvision和pytorch使用faster-rcnn&#xff0c;并提供一个demo和对应代码及解析注释。 目录 如果你不想深入了解原理和训练&#xff0c…

Hadoop安装配置

1、集群部署介绍 1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统&#xff08;HDFS&#xff0c;Hadoop Distributed Filesystem&#xff09;和MapReduce&#xff08;Google MapReduce的开源实现&#xff09;为核心的Hadoop为用户…

iOS设置拍照retake和use按钮为中文简体

iOS设置拍照retake和use按钮为中文简体&#xff0c;设置有两种方式一个是代码直接控制&#xff0c;第二就是xcode配置本机国际化为“china”&#xff08;简体中文&#xff09;。 本文重点要说的是第二种&#xff0c;这样配置有两个好处&#xff0c;一是操作比较简单&#xff0…

QT5 QSqlQuery的SELECT INSERT UPDATE DELETE命令用法

1.QSqlQuery的SELECT查询记录用法&#xff1a; QSqlQuery q("SELECT * FROM departments");QSqlRecord rec q.record();int idCol rec.indexOf("departID"); // index of the field "departID"int nameColrec.indexOf("department")…

实时手势识别 【手部跟踪】Mediapipe中的hand

参考链接&#xff1a; 1&#xff09;github代码链接&#xff1a;https://github.com/google/mediapipe 2&#xff09;说明文档&#xff1a;https://google.github.io/mediapipe 3&#xff09;python环境配置文档&#xff1a;https://google.github.io/mediapipe/getting_sta…

react native仿微信性别选择-自定义弹出框

简述 要实现微信性别选择需要使用两部分的技术&#xff1a; 第一、是自定义弹出框&#xff1b; 第二、单选框控件使用&#xff1b; 效果 实现 一、配置弹出框 弹出框用的是&#xff1a;react-native-popup-dialog&#xff08;Git地址&#xff1a;https://github.com/jacklam…

斯蒂芬斯蒂芬但是当时发生的s

2019独角兽企业重金招聘Python工程师标准>>> 什么是啊啊啊啊啊啊啊 "> 转载于:https://my.oschina.net/ivanfjz/blog/190114

Error processing line 1 of vision-1.0.0-py3.6-nspkg.pth AttributeError: ‘NoneType‘ object has no

最近调试代码不知道安装什么包导致代码运行的时候出现报错 AttributeError: NoneType object has no attribute loader &#xff0c;虽然代码也能运行通过&#xff0c;但是报错还是很不舒服。 Remainder of file ignored Error processing line 1 of D:\Anaconda3\envs\fastrc…

华为交换机S3700清空配置方法

1、用户视图下输入&#xff1a;reset saved-configuration&#xff1b;输入&#xff1a;Y&#xff0c;确认清除 2、输入&#xff1a;reboot&#xff1b;重启系统&#xff08;第1次提示输入&#xff1a;N 不保存配置&#xff1b;第2次提示输入&#xff1a;Y 确认重启&#xff0…