STM32 基础系列教程 50 – MbedTls
前言
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编译代码。本示例所用的开发板及部分原理图:
- 关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置:
- 系统时钟树
- 串口配置(用于程序调试)
- RCC配置
- SYS配置
RNG配置(非必需),MbedTls库要用到随机数,刚好在本实例用到的MCU有RNG处理器,我们这里为MbedTls选择硬件RNG,当然如果MCU不支持的话,这里可以不用管,在MbedTls配置时选用 软件RNG即可。
- Rtc配置(非必需),MbedTls库用到时有时候需要时间支持,当然也可以在配置时不定义MBEDTLS_HAVE_TIME或用户在实现time函数时来个空实现。本例我们将定义MbedTls库的MBEDTLS_HAVE_TIME特性,并利用RTC来实现时间获取。
- MbedTls库配置(也可以用KEIL MDK自带的库,操作方式类似于第48,49讲中的CJSON和Jansson库的使用)
特性支持》
模块(本例会演示SHA1算法,所以要高启对应用支持)》
- 引脚配置,用到引脚极少
- 堆栈配置(堆要大些):
- 工程代码
- 找到mbedtls.c文件,按下图所示在对应区域加入代码(演示EC非对称加密公钥导入):
- 在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
关注十三公众号
STM32 基础系列教程 50 – MbedTls相关推荐
- STM32 基础系列教程 5 – 系统定时器
前言 学习stm32 systime的使用,用基本定时器产生定时1ms定时中断,用于参生1ms系统时钟节拍,并实现将1ms 节拍改成500us 或其它时间功能.并实产生的时间节拍为机基准实现控制LED ...
- STM32 基础系列教程 4 – 基本定时器
前言 学习stm32 基本定时器的使用,用基本定时器产生定时500ms定时中断,控制LED闪烁. 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c ...
- STM32 基础系列教程 3 – 外部中断
前言 学习stm32 GPIO 的外部中断使用,用中断模式实现简单的按键输入功能,用按实现基础实验二中的LED亮灭切换功能! 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的 ...
- STM32 基础系列教程 2 - GPIO 按键输入
前言 学习stm32 GPIO 的使用,实现简单的按键输入功能,用按键的高低来控制LED的亮灭! 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c ...
- STM32 基础系列教程 1- CubeMX+GPIO
前言 学习stm32 GPIO 的使用,设置某一GPIO引脚为输出功能,将对应引脚拉高或拉低输出,同时学会初步认识STM32最新的HAL库的使用, 用代码实现控制GPIO引脚输出产生周期出1s 占空比 ...
- STM32 基础系列教程 49 – Jansson
前言 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全 ...
- STM32 基础系列教程 48 – CJSON
前言 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全 ...
- STM32 基础系列教程 47 - MD5
前言 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信 ...
- STM32 基础系列教程 46 – RNG
前言 随机数发生器(RNG)是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数.STM32F407自带RNG ,本节将给大演示STM32F4系列MCU中的RNG的使用.用 ...
最新文章
- enter对应的keycode_键盘对应数字-keycode值大全
- 两个提高javascript执行效率的简易代码分享给大家
- 访问tomcat html,访问云服务器tomcat里html界面
- 【强烈推荐】程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!!!!!
- DB2中admin_cmd执行load
- 计算机科学技术专业解析,专业解读—计算机科学与技术
- 花书+吴恩达深度学习(二六)近似推断(EM, 变分推断)
- 【bootloader】bootloader启动过程分析
- PHP上传文件大小和时间限制
- Java疯狂讲义读书笔记第一章
- 《高等代数学》(姚慕生),复习题一,第1题
- 计算机520错误,完美解决win7遇到已停止工作问题
- Java:javax.mail通过163服务器发送邮件
- python开发工程师招聘要求
- 解决Windows XP 系统下,用户登录一直循环提示激活
- 杂记——记录一次参加华为OD研发岗位的面试过程
- 北京理工大学 计算机考研真题,北京理工大学考研真题汇总
- python 英语翻译_python中英文翻译
- HDOJ3018欧拉路,几笔画判断
- 2020年8月Java语言程序设计(一)试题及答案