STM32 基础系列教程 50 – MbedTls

1 篇文章 2 订阅
1 篇文章 1 订阅

前言

      mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码。这是双重许可Apache许可证 2.0版(与GPLv2许可也可)。网站上指出,mbed TLS的目标是“易于理解,使用,集成和扩展,核心SSL C编程语言编写,并实现SSL模块,基本加密功能并提供各种实用功能。与OpenSSL和TLS的其他实现不同,mbed TLS设计为适合小型嵌入式设备,最小完整的TLS堆栈需要60KB的程序空间和64KB的RAM。它也是高度模块化的:每个组件,如加密函数,可以独立于框架的其余部分使用。因为mbedTLS是用C编程语言编写的,没有外部依赖,也就是说,无论是嵌入式还是桌面软件版的编程,只要你用的到AES,RSA等加密算法,你都可以直接拿过来源码放进你的工程中,进行编译管理,不用带着DLL,或者必须安装一些不必要的库,并且算法是标准库,所以你懂得。并且开源。

STM32CUBE里已经集成了MBEDTLS, MBEDTLS是ARM公司的开源加密库,遵守APACHE协议,大家可以随便使用MBEDTLS到开源和闭源项目上。其次,除了ECC,MBEDTLS还支持AES系列对称加密,支持基于AES的NONCE生成,支持SHA系列摘要算法等,可以应用在各种加密场景。

 

示例详解

基于硬件平台: 正点源子的stm32f4 探索者开发板,MCU 的型号是 STM32F4ZET6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。本示例所用的开发板及部分原理图:

https://www.eeboard.com/shop/data/uploads/2018/08/01/1533087371.jpg

 

    1. 关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置:

 

      1. 系统时钟树

 

      1. 串口配置(用于程序调试)

 

      1. RCC配置

      1. SYS配置

RNG配置(非必需),MbedTls库要用到随机数,刚好在本实例用到的MCU有RNG处理器,我们这里为MbedTls选择硬件RNG,当然如果MCU不支持的话,这里可以不用管,在MbedTls配置时选用 软件RNG即可。

      1. Rtc配置(非必需),MbedTls库用到时有时候需要时间支持,当然也可以在配置时不定义MBEDTLS_HAVE_TIME或用户在实现time函数时来个空实现。本例我们将定义MbedTls库的MBEDTLS_HAVE_TIME特性,并利用RTC来实现时间获取。

 

      1. MbedTls库配置(也可以用KEIL MDK自带的库,操作方式类似于第48,49讲中的CJSON和Jansson库的使用)

特性支持》

模块(本例会演示SHA1算法,所以要高启对应用支持)》

 

      1. 引脚配置,用到引脚极少

      1. 堆栈配置(堆要大些):

 

    1. 工程代码
      1. 找到mbedtls.c文件,按下图所示在对应区域加入代码(演示EC非对称加密公钥导入):

 

      1. 在main.c 中main函数中USER CODE BEGIN Includes、USER CODE0, USER CODE1、USER CODE 2, USER CODE 4 区域加入如下图所示代码:

 

c) 编译工程,调试程序, (注:在使用探索者F4调试时,下载或仿真调试时先不要PC串口工具连接上开发板的USB_232接口,有可能导致程序运行不了--boot0引脚电平不对,可以先跑起来再在PC串口工具上连接相应端口!!,可按下面的具体操作步骤来操作—>>  )

 

串口已打开,程序全速运行(F5或单击全速运行图标)相看运行结果:

 

这个时候可以在串口中看到如下程序运行结果(成功打印出JSON数据并成功解析):

为了验证算法执行结果是否正确,我们可以到在线hash计算网站上验证一下吉果,浏览器开打 http://www.kjson.com/encrypt/hash/?fm=map 输入文本“HeLLo ZhangShiSan!!”查看结果与我们程序中串口输出的一致!!

到此本次的基于MbedTls库的简单演示操作就完成了,本实例演示了非对称加密ECC算法的公钥导入操作,对称加密算法 AES 的加密码与解密,HASH算法,sha1,sha256/224的使用,MbedTls库还支持非常对的加密算法如RAS等,有兴趣的同学或有实际应用案例的同学可以好好研究与利用一下。

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

 

文中源码资料下载,在公众号里给十三发消息:

下载|STM32基础系列教程50

 

关注十三公众号

 

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
RSA加密是一种非对称加密算法,它需要使用公钥和私钥来加密和解密数据,其中公钥用于加密数据,私钥用于解密数据。在STM32上进行RSA加密的方法有很多,以下是一个简单的实现方法: 1. 生成RSA密钥对:可以使用openssl等工具生成RSA密钥对,然后将公钥和私钥导出到STM32开发板中。 2. 加载RSA公钥:将RSA公钥加载到STM32的内存中,通常可以将公钥存储在一个数组中。 3. 加载待加密数据:将待加密数据加载到STM32的内存中,通常可以将数据存储在一个数组中。 4. 加密数据:使用公钥对待加密数据进行加密。在STM32上实现RSA加密可以使用各种加密算法库,例如mbedTLS、CryptoLib等,但如果不想使用这些库,可以自己实现RSA算法。RSA加密的算法流程如下: 1. 将待加密数据转换为整数类型。 2. 使用公钥中的模数和指数对待加密数据进行加密。 3. 将加密后的结果转换为字节数组类型。 5. 存储加密结果:将加密后的结果存储在STM32的内存中,通常可以将加密结果存储在一个数组中。 6. 解密数据:使用私钥对加密后的数据进行解密。解密的算法流程如下: 1. 将加密后的数据转换为整数类型。 2. 使用私钥中的模数和指数对加密后的数据进行解密。 3. 将解密后的结果转换为字节数组类型。 7. 存储解密结果:将解密后的结果存储在STM32的内存中,通常可以将解密结果存储在一个数组中。 需要注意的是,在实现RSA加密算法时,需要使用高精度算法来进行大数运算,否则可能会导致加密结果不正确。同时,在实现RSA加密算法时,需要保证数据的长度不超过RSA密钥的长度,否则需要使用数据分块的方式来进行加密和解密。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值