STM32F10x实现AES-128-CTR解密

背景

由于项目需要,需要在STM32F10x上进行AES-128-CTR解密,怎奈网上资料鱼龙混杂,花费了两天时间才真正找到实现方法。我首先根据甲方提供的信息找到了openssl库,虽然这个库的源代码是C语言写的,但是这个库只适合用在PC机上,根本无法移植到单片机上。在我陷入绝境时偶然看到一篇大神的文章,遭遇和我相同。。。同样历经艰苦才找到解决方案,在此特别感谢,附上连接https://blog.csdn.net/qq_31878855/article/details/69396791。根据这篇文章我终于找到了希望。使用了ST官方的亲儿子库进行解码测试,在解码测试过程中又遇到了一些编码问题,最后终于解决了,终于雨过天晴可以开始新的一天了。

移植库

首先下载官方库stm32-cryp-lib,下载完成解压后可以找到加密解密库,并且还有一些官方给出的例程。
在这里插入图片描述在这里插入图片描述

根据这个main函数就可以把相关代码移植到项目中,

移植时只需要将相应的加密库STM32_Cryptographic_Library复制到项目文件目录下,
在这里插入图片描述
然后添加头文件引用

#include "crypto.h"

.c文件是不存在的,ST已经将.c问价打包成了库
在这里插入图片描述
在keil中添加.lib库的方法是直接添加库文件即可使用库中的函数。
在这里插入图片描述
在这里插入图片描述
关于不同库文件的适用可以查看官方使用手册

主要包括两个函数

  • 加密函数
int32_t STM32_AES_CTR_Encrypt(uint8_t*  InputMessage,	//输入明文
                        uint32_t  InputMessageLength,
                        uint8_t  *AES128_Key,			//key
                        uint8_t  *InitializationVector,
                        uint32_t  IvLength,				//iv
                        uint8_t  *OutputMessage,		//输出密文
                        uint32_t *OutputMessageLength);
  • 解密函数
int32_t STM32_AES_CTR_Decrypt(uint8_t*  InputMessage,
                        uint32_t  InputMessageLength,
                        uint8_t  *AES128_Key,
                        uint8_t  *InitializationVector,
                        uint32_t  IvLength,
                        uint8_t  *OutputMessage,		//输出解密的明文
                        uint32_t *OutputMessageLength);

此时又出现一个问题,客户传来的是加密后的base64编码格式的密文
直接输入到解密函数解密失败,那就需要先进行base64解码,关于解码可以看我的另一篇文章https://mp.csdn.net/mdeditor/102650833#,完成解码,将得到的字符数组转为10进制保存输入到解密函数才能得到对应的明文。

	base64_decode(Base64_miwen, Base64_jiema,&DecNumberLength);
	for(i=0;i<DecNumberLength;i++){
			DecNumber[i] = Base64_jiema[i];
		}

进行最终测试

  • 首先需要用在线加密网站加密一串字符,在线加密网站http://tool.chacuo.net/cryptaes
    在这里插入图片描述
  • 将密文输入到程序中
    char Base64_miwen[] = "+aYwiUJf84DVOqbcS1FVjrDMjAyd1fZw2XFL1bFYQUE=";
	unsigned char Base64_jiema[PLAINTEXT_LENGTH];
  • 编译程序,下载,通过串口打印结果
    在这里插入图片描述
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值