OTA场景使用mbed TLS 进行 MD5 校验

应用场景:

OTA或者IAP等升级场景,或者数据传输过程中的文件校验.

在使用 mbed TLS 进行 MD5 校验时,首先需要理解 MD5 是一种哈希算法,用于生成一个 128 位(16 字节)的哈希值,通常用于校验数据的完整性。使用 mbed TLS 提供的 API,可以非常方便地计算 MD5 哈希。

步骤概述
安装和配置 mbed TLS。
在程序中引用所需的头文件。
使用 mbed TLS 的 MD5 API 来计算数据的 MD5 哈希。
打印或比较计算结果。
具体代码示例
下面是一个简单的示例,展示如何使用 mbed TLS 来计算一个字符串的 MD5 哈希值。

1. 安装和配置 mbed TLS

首先确保你已经安装了 mbed TLS。如果你还没有安装,可以访问 mbed TLS 官网 获取源代码并按照官方文档进行安装。你也可以直接下载源码,并将其添加到你的嵌入式项目中。

2. 引入头文件

你需要包含 mbed TLS 提供的 MD5 和其他相关的加密功能头文件。

#include <stdio.h>
#include <string.h>
#include "mbedtls/md5.h"

3. 使用 mbed TLS 计算 MD5

然后,你可以通过 mbedtls_md5 函数来计算数据的 MD5 哈希值。这里的示例计算一个简单字符串的 MD5 值。

int main() {// 要计算 MD5 的数据unsigned char input_data[] = "Hello, mbed TLS!";// 用于存储计算结果的 MD5 哈希值unsigned char md5_result[16]; // MD5 结果是 16 字节// 计算 MD5mbedtls_md5(input_data, strlen((const char *)input_data), md5_result);// 打印 MD5 校验值printf("MD5 Checksum: ");for (int i = 0; i < 16; i++) {printf("%02x", md5_result[i]);}printf("\n");return 0;
}

代码解析:
输入数据:我们定义了一个字符串 input_data,它是要进行 MD5 校验的数据。在实际应用中,输入数据可以是文件、消息或其他任何需要进行哈希校验的内容。

输出 MD5 值:MD5 哈希值被存储在 md5_result 数组中,它有 16 字节,表示一个 128 位的哈希值。

调用 mbedtls_md5 函数:

mbedtls_md5() 是 mbed TLS 提供的一个简单接口,用于计算 MD5 哈希值。
第一个参数是输入数据的指针,第二个参数是数据的长度,第三个参数是存储结果的缓冲区。
打印 MD5 值:MD5 值以十六进制格式输出,每个字节输出为两位十六进制数。

4. 编译和运行

假设你已经安装了 mbed TLS,并且将其包含在你的项目中,你可以编译并运行程序。最终,程序会输出 input_data 字符串的 MD5 校验值。例如:

MD5 Checksum: 1e1d1e5d9d4d2348f3e0f6d66a8e6b0d

使用 mbed TLS 的 MD5 结构
如果你希望使用更灵活的方式来计算 MD5,比如对数据进行增量计算(如处理大文件或流式数据),你可以使用 mbed TLS 提供的 mbedtls_md5_context 结构进行初始化和逐步更新。以下是一个增量计算 MD5 的示例:

#include <stdio.h>
#include <string.h>
#include "mbedtls/md5.h"int main() {// 要计算 MD5 的数据unsigned char input_data[] = "Hello, mbed TLS!";// 用于存储计算结果的 MD5 哈希值unsigned char md5_result[16];// 初始化 MD5 上下文mbedtls_md5_context ctx;mbedtls_md5_init(&ctx);// 启动 MD5 计算mbedtls_md5_starts(&ctx);// 更新 MD5(对于大数据,可以多次调用此函数进行增量计算)mbedtls_md5_update(&ctx, input_data, strlen((const char *)input_data));// 完成计算并获取结果mbedtls_md5_finish(&ctx, md5_result);// 打印 MD5 校验值printf("MD5 Checksum: ");for (int i = 0; i < 16; i++) {printf("%02x", md5_result[i]);}printf("\n");// 清理上下文mbedtls_md5_free(&ctx);return 0;
}

代码解释:
初始化上下文:mbedtls_md5_context 结构体用于保存 MD5 计算的状态。我们调用 mbedtls_md5_init 来初始化该结构。

启动 MD5 计算:mbedtls_md5_starts 函数用于启动 MD5 计算。

逐步更新:mbedtls_md5_update 函数允许你在多个步骤中逐步提供数据进行计算。这对于处理大文件或流式数据非常有用。如下图所示,多次调用mbedtls_md5_update去进行一个完整的文件校验。
在这里插入图片描述

完成计算并获取结果:mbedtls_md5_finish 用于完成 MD5 计算,并将结果存储在 md5_result 中。

清理:mbedtls_md5_free 用于清理 MD5 上下文,释放资源。

总结

通过 mbed TLS 提供的 API,计算 MD5 校验变得非常简单。在嵌入式开发中,使用 mbedtls_md5 函数可以快速生成 MD5 校验值,确保数据的完整性。如果你的应用需要对大数据或流式数据进行 MD5 计算,可以使用增量计算方法(通过 mbedtls_md5_context)。这种方法不仅适用于简单的数据校验,也适合处理更复杂的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497150.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]

Gin 是一个用 Go 语言编写的 HTTP Web 框架&#xff0c;以其高性能和简洁的 API 而闻名。它提供了一套强大的路由功能&#xff0c;使得开发者可以轻松地定义 URL 路由规则&#xff0c;并将这些规则映射到具体的处理函数&#xff08;handler&#xff09;。以下是关于 Gin 路由的…

路过石岩浪心古村

周末常去的七彩城堡儿童乐园附近经常有老房子&#xff0c;没想到老房子最多的地方还是浪心古村。而且越看越有历史。 见到一座写着《序西书室》的房子&#xff0c;我最开始以为是一个古代的学校。但是查了百度更加不知道什么意思了哈。‌“序西书室”‌是指《文心雕龙》中的一个…

[江科大STM32] 第五集STM32工程模板——笔记

保存&#xff0c;进去选芯片型号&#xff0c;我们是F10C8T6 再添加一些文件&#xff0c;自己看路径 然后去 复习这三文件 打开KEIL add existing那个&#xff0c;添加已经存在的文件 还有5个.c.h文件也要添加进来 回到KEIL 点击旁边的settings 如果你用寄存器开发就建到这里就可…

目标检测,语义分割标注工具--labelimg labelme

1 labelimg labelimg可以用来标注目标检测的数据集&#xff0c; 提供多种格式的输出&#xff0c; 如Pascal Voc, YOLO等。 1.1 安装 pip install labelimg1.2 使用 命令行直接输入labelimg即可打开软件主界面进行操作。 使用非常简单&#xff0c; 不做过细的介绍&#xff0…

沪深300股指期货一点多少钱?

首先&#xff0c;我们得知道什么是沪深300股指期货。简单来说&#xff0c;它就是一种期货合约&#xff0c;这个合约的“价格”是根据沪深300指数的点数来定的。沪深300指数是由上海和深圳两个交易所里300只最大的股票组成的一个指数&#xff0c;代表了整个股市的大体走势。 沪…

kettle经验篇:Pentaho Repository 类型资源库卡顿问题

2024年马上就结束了&#xff0c;终于在结束前解决了困扰许久的一个问题&#xff1a;kettle的Pentaho Repository 资源库异常卡顿。所以在此也梳理、记录下2024年的最后一个大问题。 项目场景 工作中一个重要内容是数据中心项目&#xff0c;也就必不可少的要用到ETL技术&#x…

工具变量笔记

补充知识 简单介绍工具变量 假设 Y i α β D i ϵ i Y_i\alpha\beta D_i\epsilon_i Yi​αβDi​ϵi​, where E ( ϵ i ∣ D i ) 0 E(\epsilon_i\mid D_i)0 E(ϵi​∣Di​)0. 但是通常这个条件不满足。于是假如有这样一个工具变量 Z i Z_i Zi​存在的话&#xff0c;满…

简易CPU设计入门:本系统中的通用寄存器(五)

项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了&#xff0c;那就不用重复下载了。如果还没有下载&#xff0c;那么&#xff0c;请大家点击下方链接&#xff0c;来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&#xff0c;我…

04.HTTPS的实现原理-HTTPS的混合加密流程

04.HTTPS的实现原理-HTTPS的混合加密流程 简介1. 非对称加密与对称加密2. 非对称加密的工作流程3. 对称加密的工作流程4. HTTPS的加密流程总结 简介 主要讲述了HTTPS的加密流程&#xff0c;包括非对称加密和对称加密两个阶段。首先&#xff0c;客户端向服务器发送请求&#xf…

【WebAR-图像跟踪】在Unity中基于Imagine WebAR实现AR图像识别

写在前面的话 感慨一下&#xff0c; WebXR的发展是真的快&#xff0c;20年的时候&#xff0c;大多都在用AR.js做WebAR。随着WebXR标准发展&#xff0c;现在诸如Threejs、AFrame、Unity等多个平台都支持里WebXR。 本文将介绍在Unity中使用 Image Tracker实现Web端的AR图像识别功…

视频会议是如何实现屏幕标注功能的?

现在主流的视频会议软件都有屏幕标注功能&#xff0c;屏幕标注功能给屏幕分享者讲解分享内容时提供了极大的方便。那我们以傲瑞视频会议&#xff08;OrayMeeting&#xff09;为例&#xff0c;来讲解屏幕标注是如何实现的。 傲瑞会议的PC端&#xff08;Windows、信创Linux、银河…

物料描述的特殊字符

MM03查看某料号&#xff0c;有特殊字符&#xff0c;看上去是# SE16N中并没有显示出来这个特殊字符 DeBug时可以看到#&#xff0c;复制出来也是#&#xff0c;但其实不是 ALV中也看不到这个特殊字符 需要写代码&#xff0c;获取这个编码Unicode 参考&#xff1a;【ABAP系列】SAP…

HEIC 是什么图片格式?如何把 iPhone 中的 HEIC 转为 JPG?

在 iPhone 拍摄照片时&#xff0c;默认的图片格式为 HEIC。虽然 HEIC 格式具有高压缩比、高画质等优点&#xff0c;但在某些设备或软件上可能存在兼容性问题。因此&#xff0c;将 HEIC 格式转换为更为通用的 JPG 格式就显得很有必要。本教程将介绍如何使用简鹿格式工厂&#xf…

多模态论文笔记——LLaVA

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍多模态模型&#xff1a;LLaVA。处理包含图像和文本的多模态数据&#xff0c;并生成合理准确的回答。 文章目录 论文模型架构视觉编码器语言模型多模态融…

【源码 导入教程 文档 讲解】基于springboot校园新闻管理系统源码和论文

可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C、python、数据可视化、大数据、文案 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xf…

时序论文34|AdaWaveNet:用于时间序列分析的自适应小波网络

论文标题&#xff1a;AdaWaveNet: Adaptive Wavelet Network for Time Series Analysis 论文链接&#xff1a;https://arxiv.org/abs/2405.11124 论文代码&#xff1a;https://github.com/comp-well-org/AdaWaveNet/ 前言 这篇文章面向非平稳时间序列进行分析与建模&#x…

运行Springboot + Vue 项目

想要源码&#xff0c;请点击的系统获取源码&#xff1a;https://bichuanyuan.online **前言&#xff1a;**很多小白拿到java SpringBoot Vue前后端分离的项目却不知道怎么运行起来&#xff0c;这里博主就带领小白们一起将项目运行起来吧&#xff01; 一、环境准备 java后端…

16、【ubuntu】【gitlab】【补充】服务器断电后,重启服务器,gitlab无法访问

背景 接wiki 【服务器断电后&#xff0c;重启服务器&#xff0c;gitlab无法访问】https://blog.csdn.net/nobigdeal00/article/details/144280761 最近把不小心把服务器重启&#xff0c;每次重启后&#xff0c;都会出现gitlab无法访问 分析 查看系统正在运行的任务 adminpc…

保姆级JavaWeb项目创建、部署、连接数据库(tomcat)

目录 简介&#xff1a; 一、创建项目 二、tomcat部署 1、将tomcat解压在一个自己找得到路径 2、在idea中添加tomacat模板块 3、添加tomcat服务器 ?三、连接数据库 1、创建一个新的数据库 2、为项目添加jdbc驱动包 3、创建jdbc类 简介&#xff1a; 本学期学的javawe…

使用 HTML 和 CSS 实现绚丽的节日烟花效果

文章目录 1. 效果预览2. 核心技术栈3. 核心代码解读3.1 HTML结构3.2 霓虹文字的CSS样式3.2.1 核心样式代码3.2.2 动画效果 3.3 JavaScript 的烟花效果实现3.3.1 烟花上升3.3.2 粒子爆炸 4. 用户交互5. 运行步骤总结 1. 效果预览 打开后输入文本的展示内容 用户点击页面后播放…