STM32使用mbedTLS实现SHA1加密算法

2019-07-21 05:22发布

STM32使用mbedTLS实现SHA1加密算法1、引言[size=10.5000pt]ARM mbedtls使开发人员可以非常轻松地在(嵌入式产品中加入加密和 SSL/TLS 功能。它提供了具有直观的 API 和可读源代码的 SSL 库。该工具即开即用,可以在大部分系统上直接构建它,也可以手动选择和配置各项功能。
[size=10.5000pt]mbedtls 库提供了一组可单独使用和编译的加密组件,还可以使用单个配置头文件加入或排除这些组件。
[size=10.5000pt]从功能角度来看,该mbedtls分为三个主要部分:
[size=10.5000pt]- SSL/TLS 协议实施。
[size=10.5000pt]- 一个加密库。
[size=10.5000pt]- 一个 X.509 证书处理库。
[size=10.5000pt]本文将介绍如何使用[size=10.5000pt]mbedTLS[size=10.5000pt]STM32平台(MDK5编译器)下实现SHA1加密算法。
2、环境配置[size=10.5000pt]编译器:MDK v5.21
[size=10.5000pt]安装插件包:ARM.mbedTLS.1.3.1.pack
[size=10.5000pt]硬件芯片:stm32f103
[size=10.5000pt]在安装完上述pack包的情况下新建或打开stm32f103系列工程,打开Manage Run-Time Environment,打开Security并勾选mbed TLS选项,如下图所示。
图片1.png
[size=10.5000pt]设置完成后工程中就加入了mbedTLS相关代码,如下所示
图片2.png [size=10.5000pt]
3、使用示例[size=10.5000pt]在加入的代码中打开mbedTLS_config.h文件,根据实际使用算法情况修改改文件,如使用SHA1算法需打开#define MBEDTLS_SHA1_C注释,如下所示
图片3.png [size=10.5000pt]
[size=10.5000pt]然后在主函数中加入初始化及测试代码,
[size=10.5000pt]int i;
[size=10.5000pt]unsigned char encrypt[] = "admin";   
[size=10.5000pt]unsigned char decrypt[20];
[size=10.5000pt]mbedtls_sha1_context sha1_ctx;
[size=10.5000pt]
[size=10.5000pt]mbedtls_sha1_init(&sha1_ctx);
[size=10.5000pt]mbedtls_sha1_starts(&sha1_ctx);
[size=10.5000pt]mbedtls_sha1_update(&sha1_ctx, encrypt, strlen((char *)encrypt));
[size=10.5000pt]mbedtls_sha1_finish(&sha1_ctx, decrypt);
[size=10.5000pt]printf("加密前:%s 加密后:", encrypt);
[size=10.5000pt]mbedtls_sha1_free(&sha1_ctx);
[size=10.5000pt]for (i = 0; i<20; i++)
[size=10.5000pt]{
[size=10.5000pt]        [size=10.5000pt]printf("%02x", decrypt);            
[size=10.5000pt]}
[size=10.5000pt]如下图所示,
图片4.png [size=10.5000pt]
[size=10.5000pt]上述例子中加密前数据为字符串admindebug(或串口打印输出)获取到加密后数据如下
[size=10.5000pt] 图片5.png
[size=10.5000pt]可通过http://www.ttmd5.com/hash.php?type=5在线验证加密算法是否正确,
[size=10.5000pt] 图片6.png
[size=10.5000pt]可见验证结果与上述使用mbedTLS计算结果一致。
[size=10.5000pt]

欢迎关注我的公众号“嵌入式大玩家” 后台回复任何技术内容一起学习讨论
qrcode_for_gh_98f1106d47b4_258.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。