日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32 lwip 如何发送不出_mbedtls | 移植mbedtls库到STM32裸机的两种方法

發布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32 lwip 如何发送不出_mbedtls | 移植mbedtls库到STM32裸机的两种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、mbedtls 開源庫

1. mbedtls是什么

Mbed TLS是一個開源、可移植、易于使用、代碼可讀性高的SSL庫??蓪崿F加密原語,X.509證書操作以及SSL / TLS和 DTLS 協議,它的代碼占用空間小,非常適合用于嵌入式系統。

mbedtls遵循 Apache 2.0 開源許可協議,目前由 TrustedFirmware 維護(Linaro主持的一個治理開放社區項目),在Github上已收獲 2.6k star,目前Github上發布的最新版本為 2.24.0 版本,開源倉庫地址為:

https://github.com/ARMmbed/mbedtls

2. mbedtls有何用

mbedtls庫提供了 TLS / DTLS協議的實現,有了mbedtls庫之后意味著:

  • TCP + TLS = TCP(S)
  • MQTT + TLS = MQTT(S)
  • HTTP + TLS = HTTP(S)
  • COAP + DTLS = COAP(S)

目前的物聯網操作系統+各種通信模組方式可以很好的實現TCP/UDP通信,進而提供一些HTTP、MQTT、COAP之類的上層協議,這些協議最大的特點是“明文傳輸”,一旦有中間人想要截獲篡改數據,非常容易。

要想物聯網設備和服務器之間具備高安全性,mbedtls庫不可或缺。

3. 下載mbedtls庫

在github release頁面下載:

4. STM32移植方法

移植mbedtls開源庫到stm32有兩種方法:

① 針對STM32CubeMX中Middleware下面已經提供mbedtks庫的情況:直接使用cubeMX配置即可;

② 針對STM32CubeMX中沒有提供mbedtls庫的情況:手動移植。

接下來分別演示如何移植。

二、使用STM32CubeMX移植

此小節中我使用的是正點原子STM32F407探索者開發板,首先準備一份可以正常使用printf打印到串口的工程。

1. 開啟RNG外設支持(可選)

一些STM32系列中有RNG外設(隨機數發生器),如果有的話就開啟,沒有就不用開啟,接著后面的步驟就好。

2. RTC支持和網絡支持(可選)

網絡支持需要提供一套TCP/IP協議棧,比如基于AT模組的SAL層、lwip協議棧等,這里我們不使用網絡連接功能,后續在帶操作系統移植時講解。

RTC支持是為了校驗CA證書有效期提供時間支持,這里我們不使用時間功能,后續在帶操作系統移植時講解。

3. 開啟mbedtls庫

在Middleware下開啟mbedtls庫支持:

4. 配置mbedtls

mebdtls庫提供的算法非常多,全都通過宏定義來配置。

① 特性配置:保持默認即可。② 使用功能模塊配置(重點):

5. 編寫測試代碼

生成工程,在middleware文件夾下即可看到mbedtls庫:打開工程,在main.c中包含頭文件:

/*?Private?includes?----------------------------------------------------------*/
/*?USER?CODE?BEGIN?Includes?*/
#include?
#include?"mbedtls/sha1.h"??//使用sha1相關加密函數
#include?"string.h"????//使用到了strlen函數
/*?USER?CODE?END?Includes?*/

然后在main函數中編寫如下測試代碼:

/*?USER?CODE?BEGIN?2?*/
printf("mbedtls?port?on?ATK-STM32F407?board?by?mculover666\r\n");

/*?sha1?test?*/
char?*source_cxt?=?"mculover666";
char?encrypt_cxt[64];

printf("source?context?is:%s\r\n",?source_cxt);

mbedtls_sha1_context?sha1_ctx;
mbedtls_sha1_init(&sha1_ctx);
mbedtls_sha1_starts(&sha1_ctx);
mbedtls_sha1_update(&sha1_ctx,?(unsigned?char?*)source_cxt,?strlen(source_cxt));
mbedtls_sha1_finish(&sha1_ctx,?(unsigned?char?*)encrypt_cxt);
mbedtls_sha1_free(&sha1_ctx);

int?i?=?0;
printf("sha1?encrypt?context?is:[");
while?(encrypt_cxt[i])?{
??printf("%02x",?encrypt_cxt[i]);
??i++;
}
printf("]\r\n");

/*?USER?CODE?END?2?*/

特別注意:Keil-MDK需要改為ANSI 編碼,否則因為字符串編碼問題,會導致加密結果出錯。

編譯,下載到開發板中,在串口助手中查看加密結果:

6. 驗證加密結果

可以使用一些在線工具計算出結果進行對比,如圖,加密無誤:

https://1024tools.com/hash

三、手動移植mbedtls庫

這里我以STM32L431RCT6小熊派開發板為例,首先準備一份可以正常使用printf打印的裸機工程,其中沒有開啟硬件RNG外設。

1. 復制mbedtls相關文件

① 從mbedtls庫中復制mbedtls源碼文件到工程中:② 再復制mbedtls示例配置文件:

2. 添加mbedtls文件到MDK中

① 添加 mbedtls\library 文件夾中所有的c文件:再將配置文件也添加到工程目錄,方便修改:

② 添加頭文件路徑:

③ 在宏定義中指定mbedconfig配置文件:

MBEDTLS_CONFIG_FILE=

3. 修改mbedtls配置

編輯 config-mini-tls1_1.h 文件。

① 配置mbedtls系統支持:② 配置功能模塊③ 屏蔽功能測試,添加一個宏定義,表示沒有平臺支持:

4. 編寫測試代碼

打開工程,在main.c中包含頭文件:

/*?Private?includes?----------------------------------------------------------*/
/*?USER?CODE?BEGIN?Includes?*/
#include?
#include?"mbedtls/sha1.h"
#include?"string.h"
/*?USER?CODE?END?Includes?*/

然后在main函數中編寫如下測試代碼:

/*?USER?CODE?BEGIN?2?*/
printf("mbedtls?port?on?BearPi-STM32L431RC?board?by?mculover666\r\n");

/*?sha1?test?*/
char?*source_cxt?=?"mculover666";
char?encrypt_cxt[64];

printf("source?context?is:%s\r\n",?source_cxt);

mbedtls_sha1_context?sha1_ctx;
mbedtls_sha1_init(&sha1_ctx);
mbedtls_sha1_starts(&sha1_ctx);
mbedtls_sha1_update(&sha1_ctx,?(unsigned?char?*)source_cxt,?strlen(source_cxt));
mbedtls_sha1_finish(&sha1_ctx,?(unsigned?char?*)encrypt_cxt);
mbedtls_sha1_free(&sha1_ctx);

int?i?=?0;
printf("sha1?encrypt?context?is:[");
while?(encrypt_cxt[i])?{
printf("%02x",?encrypt_cxt[i]);
i++;
}
printf("]\r\n");

/*?USER?CODE?END?2?*/

特別注意:Keil-MDK需要改為ANSI 編碼,否則因為字符串編碼問題,會導致加密結果出錯。

編譯,下載到開發板中,在串口助手中查看加密結果:

5. 測試加密結果

同第二節第 6 小節。

四、移植總結

mbedtls可以說是一個牛逼的開源庫,其功能可以靈活的通過宏定義來選擇,整個移植過程比較簡單。

而且mbedtls庫對于我們的配置文件會做檢查,一般在配置文件的最后一句:

#include?"mbedtls/check_config.h"

如果對應某些功能我們開啟了,但是沒有開啟它的依賴功能,編譯器會直接報錯,根據報錯修改對應定義即可。

總之,這么好的東西,不玩一下可是睡不著的~

接收精彩文章及資源推送,請訂閱我的微信公眾號:『mculover666』。

總結

以上是生活随笔為你收集整理的stm32 lwip 如何发送不出_mbedtls | 移植mbedtls库到STM32裸机的两种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久在线免费观看 | 亚洲国产剧情 | 风流老熟女一区二区三区 | 91色爱| 久久夜色精品国产欧美乱 | 国产精品自拍一区 | 成年人网站av | 亚洲日本国产精品 | 日韩一级高清 | 国产精品九九九九九 | 成年人在线免费观看视频网站 | 精品少妇一区二区 | 伊人av影院 | 国产不卡在线播放 | 向着小小的花蕾绽放 | 一区二区色 | 91超薄肉色丝袜交足高跟凉鞋 | 女人脱下裤子让男人捅 | 麻豆传媒网址 | 欧美一级网 | 中文精品一区二区三区 | 激情小视频| 天天躁日日躁bbbbb | 中文字幕+乱码+中文字幕明步 | 丰满少妇被猛烈进入一区二区 | 欧美xxxx喷水 | 欧美专区亚洲专区 | 成人手机在线视频 | 超碰2025 | 最近中文字幕在线观看 | 51久久久 | 欧美久久天堂 | 1000部拍拍拍18勿入免费视频 | 久久久久亚洲av片无码下载蜜桃 | 在线观看中文字幕一区二区 | 成人一级黄色 | www.久久av.com | 亚洲天堂少妇 | 国产在线综合视频 | 国语对白一区二区 | 亚洲福利社 | 在线观看的黄网 | 91网站在线免费看 | 欧美精品v国产精品v日韩精品 | 日韩一本在线 | 中文字幕av第一页 | 国产欧美啪啪 | 97爱视频 | 中文黄色片 | 国产精品1页 | 少妇人妻精品一区二区三区 | 亚洲午夜久久久久久久久久久 | 国产精品资源网 | 免费在线观看视频a | 欧美午夜性春猛交 | av片大全| 日韩精品卡通动漫网站 | 国产一区二区视频在线观看免费 | 久久精品一区二区三 | 激情在线网站 | 青青草国产精品视频 | 国产愉拍| 欧美三根一起进三p | 精品视频不卡 | 6680新视觉电影免费观看 | 亚洲va久久久噜噜噜无码久久 | 日韩精品免费在线视频 | 蜜桃色999| 国产乱码精品一区二区三区忘忧草 | 亚洲日本网站 | 久久精品一区二区 | 日本少妇一级片 | 岛国久久久 | 亚洲免费视频一区 | 致单身男女免费观看完整版 | 97国产超碰 | 国产欧美日韩三级 | 午夜视频1000 | 成人在线精品视频 | 99热在线观看免费精品 | 亚洲一级片免费 | 韩国精品一区二区 | 中国丰满人妻videoshd | 天天透天天操 | 伊人伊色| 在线观看视频一区二区 | 在线看片亚洲 | 日韩精品久久久久久久酒店 | 日日骑夜夜操 | 亚洲一区美女 | 日本一区二区在线看 | 国产精品无码一区二区三区免费 | 无码粉嫩虎白一线天在线观看 | 91精品国产99久久久久久 | 色偷偷五月天 | 影视av | 中文字幕理伦片免费看 | 日韩中文字幕高清 | 欧美激情视频网址 |