C语言实现AES加密解密

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

mbedTLS是一个开源TLS协议栈,主要用于嵌入式开发,其源代码网址为https://tls.mbed.org/aes-source-code。在该页面上点击downloadmbedTLS即可下载最新的协议栈,解压该压缩包就可以得到协议栈源代码。协议栈中的各种算法都独立封装在C文件中,彼此耦合度较低,目的是便于调用。我这里下的是2.2.1版本,解压后可以看到mbedtls-2.2.1\include\mbedtls路径下有许多header文件,将其添加到IDE的头文件中。在mbedtls-2.2.1\library下有许多c文件,我们只添加需要用到的aes.c。

这里使用Visual Studio2013 C/C++环境进行编译演示。新建控制台应用,空工程。在Header Files文件夹下添加头文件,注意连文件夹一起添加,因为C文件中的include是包含路径的。然后把aes.c添加到source文件夹里。此时直接编译就能通过啦!


接下来就是在主函数里调用函数。这里调用了ECB模式和CBC模式两种。源代码如下:

#include<stdio.h>
#include "mbedtls/aes.h"
#include "mbedtls/compat-1.3.h"#define AES_ECB 0
#define AES_CBC 1
#define AES_CFB 2
#define AES_CTR 3
#define MODE AES_ECBunsigned char key[16] = { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 };
unsigned char plain[32] = { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 };
unsigned char plain_decrypt[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
unsigned char IV[16];
unsigned char cypher[32];
int i = 0;
mbedtls_aes_context aes;void SetIV()
{int i;for (i = 0; i < 16; i++){ IV[i] = 0x55;}}
int main()
{if (MODE == AES_ECB){mbedtls_aes_setkey_enc(&aes, key, 128);//  set encrypt key            mbedtls_aes_crypt_ecb(&aes, AES_ENCRYPT, plain, cypher);mbedtls_aes_setkey_dec(&aes, key, 128);//  set decrypt keymbedtls_aes_crypt_ecb(&aes, AES_DECRYPT, cypher, plain_decrypt);i++;            }if (MODE == AES_CBC){mbedtls_aes_setkey_enc(&aes, key, 128);//  set encrypt keySetIV();mbedtls_aes_crypt_cbc(&aes, AES_ENCRYPT, 32, IV, plain, cypher);mbedtls_aes_setkey_dec(&aes, key, 128);//  set decrypt keySetIV();mbedtls_aes_crypt_cbc(&aes, AES_DECRYPT, 32, IV, cypher, plain_decrypt);i++;            }
}



单步运行,在 debug 窗口中可以观察到 cypher 数组的值改变,变为加密后的值,以及 plain _decrypt 数组中的值变为解密后的值,也就是和 plain 数组中一样。J~

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

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

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

相关文章

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…

Udp通讯(零基础)

前面学习了Tcp通讯之后听老师同学们讲到Udp也可以通讯&#xff0c;实现还要跟简单&#xff0c;没有繁琐的连接&#xff0c;所以最近学习了一下&#xff0c;记录下来以便忘记&#xff0c;同时也发表出来与大家相互学习&#xff0c;下面是我自己写的一个聊天例子&#xff0c;实现…

VOC数据集格式转化成COCO数据集格式

VOC数据集格式转化成COCO数据集格式 一、唠叨 之前写过一篇关于coco数据集转化成VOC格式的博客COCO2VOC&#xff0c;最近读到CenterNet的官方代码&#xff0c;实现上则是将voc转化成coco数据格式&#xff0c;这样的操作我个人感觉很不习惯&#xff0c;也觉得有些奇葩&…

react native android6+拍照闪退或重启的解决方案

前言 android 6权限使用的时候需要动态申请&#xff0c;那么在使用rn的时候要怎么处理拍照权限问题呢&#xff1f;本文提供的是一揽子rn操作相册、拍照的解决方案&#xff0c;请看正文的提高班部分。 解决步骤 1、AndroidManifest.xml设置拍照权限&#xff1a; <uses-perm…

学术论文SCI、期刊、毕业设计中的图表专用软件

Origin Origin是由OriginLab公司开发的一个科学绘图、数据分析软件&#xff0c;支持在Microsoft Windows下运行。Origin支持各种各样的2D/3D图形。Origin中的数据分析功能包括统计&#xff0c;信号处理&#xff0c;曲线拟合以及峰值分析。 Origin中的曲线拟合是采用基于Lever…

常用的学术论文图表(折线图、柱状图)matplotlib python代码模板

最终选用了pythonMatplotlib。Matplotlib是著名Python的标配画图包&#xff0c;其绘图函数的名字基本上与 Matlab 的绘图函数差不多。优点是曲线精致&#xff0c;软件开源免费&#xff0c;支持Latex公式插入&#xff0c;且许多时候只需要一行或几行代码就能搞定。 然后小编经过…