AES加解密效率测试(纯软件AES128/256)--以嵌入式Cortex-M0与M3 平台为例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/HowieXue/article/details/76549487

#AES256/128 纯软件加解密时间效率测试–以Cortex-M0与M3 MCU为例

  • 一、测试环境与方法
  • 二、测试代码介绍(以AES256为例)
  • 三、测试结果与抓包截图

AES软件源码库(C语言),包含全部CBC/CTR等模式,见链接:
http://download.csdn.net/download/howiexue/9978483

SHA、HMAC软件源码库(C语言)见链接:
http://download.csdn.net/download/howiexue/9978474

常见加密/签名/哈希算法性能比较 (多平台 AES/DES, DH, ECDSA, RSA等)
https://blog.csdn.net/howiexue/article/details/79283008

另一篇基于STM32L0x平台 **《SHA/HMAC/AES-CBC/CTR算法执行效率以及RAM消耗测试》**请见链接: http://blog.csdn.net/howiexue/article/details/78700694


###一、测试环境与方法:

1、测试环境:MCU 为STM32F030(Cortex-M0)、STM32F103(Cortex-M3),主频分别统一设置为24M、48M

2、加解密算法:AESCBC-256以及128

3、测试方法:输入不同数据量,通过GPIO翻转法获取软件执行AES加解密所耗的时间


###二、测试代码介绍(以AES256为例)

测试代码很简单,就是将一个GPIO拉高,在AES加解密时拉低,并用逻辑分析仪进行抓包或者示波器查看低电平的间隔。

这里以AESCBC256代码为例:(所有数据仅供测试所用)

准备AES 参数(key、iv、testdata等)

const unsigned char AES_key[32]		 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};

const unsigned char AES_iv[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

unsigned char testdata[]= {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 以下省略, 想测多少就输入多少数据 。。。}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

执行AES加解密 ,同时反转IO电平

void AesTest(void)
{
  int testdata_Len;
  testdata_Len=sizeof(testdata);
  Aes enc;
	for(int i=0; i<100;i++)
	{
	/******** 加密过程 ************/
	HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
    AesSetKey(&enc, AES_key, sizeof(AES_key), AES_iv, AES_ENCRYPTION);//初始化AES加密参数,IO电平为高   
    HAL_Delay(1);//delay 1 ms为加密,2ms为解密
    HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);    
    AesCbcEncrypt(&enc, (byte *)testdata, (byte *)testdata,   testdata_Len);//执行加密函数,此时电平为低
	HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
    HAL_Delay(2);
	 /******** 解密过程 ************/ 
     AesSetKey(&enc, AES_key, sizeof(AES_key), AES_iv, AES_DECRYPTION);//初始化AES解密参数,IO电平为高
    HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);    
    AesCbcDecrypt(&enc, (byte *)testdata, (byte *)testdata,   testdata_Len);执行解密函数,此时电平为低
    HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

##三、测试结果与抓包截图

##1、主频统一设置为24M

这里写图片描述

###附部分I2C抓包截图:
1024byte时M3工作在24M主频:

这里写图片描述

1024byte时M0工作在24M主频:

这里写图片描述

###2、主频设置为48M

基于STM32F030C8(Cortex-M0)芯片,工作在48M主频:
这里写图片描述

###附部分I2C抓包截图:

1024 – AES256 :

这里写图片描述

128 – AES256:

这里写图片描述

16 - AES256:

AES256

####由此可见,AES(Advanced Encryption Standard) 加密算法相比于RSA等对称加密算法是非常快的。。


##四、参考:官方数据AES硬件与软件加密效率

4.1 飞思卡尔单片机(M4)
这里写图片描述

这里写图片描述

4.2 STM32单片机(M3)

这里写图片描述


博主热门文章推荐:

一篇读懂系列:

LoRa系列:

网络安全系列:

嵌入式开发系列:

                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-526ced5128.css" rel="stylesheet">
                </div>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值