STM32 基础系列教程 47 - MD5

2023-11-01

前言

    MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。1991年,Rivest开发出技术上更为趋近成熟的md5算法。它在MD4的基础上增加了"安全-带子"(safety-belts)的概念。虽然MD5比MD4复杂度大一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息-摘要的大小和填充的必要条件与MD4完全相同。Den boer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。

目前MD5广泛应用于一致性验证同,数字签名,安全访问认证等用途

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 总体流程如下图所示, 表示第i个分组,每次的运算都由前一轮的128位结果值和第i块512bit值进行运算:

好了,下面开始进入正题。

 

 

示例详解

基于硬件平台: 正点源子的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配置

 

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

      1. 堆栈配置(也可保持默认):

 

    1. 工程代码
      1. 将事先准备好的MD5.c 文件加入工程,并将MD5.h文件放到工程INC文件夹下,这些文件可以在Lwip协议栈中提取,当然百度也能百度得到:

 

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

   

 

 

 

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

 

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

 

这个时候可以在串口中看到如下程序运行结果:

到此本次的MD5实验就顺利完成了,从本次实验可以看到,MD5的算法使用还是比较简单的,只需用到MD5Init,MD5Update和MD5Final三个接口即可,简单方便。其中MD5Init为初始化接口,MD5Update为计算接口,MD5Final为获得结果接口。作为MD5的使用,会用这三个接口即可。该工程算法可直接移植到M0,M3等其它内核心MCU同样适用。

 

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

 

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

下载|STM32基础系列教程47

 

关注十三公众号

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 基础系列教程 47 - MD5 的相关文章

  • iPhone:快速哈希函数,用于将网络图像(url)存储为文件(哈希文件名)

    iPhone 可用于对 Web url 图像 进行哈希处理的快速哈希函数是什么 我想将缓存的 Web 图像存储为一个文件 并以哈希值作为文件名 因为我认为原始 Web url 可能包含奇怪的字符 可能会导致文件系统出现问题 哈希函数不需要是
  • 计算大文件的Md5哈希值

    我想让它变得非常清楚和简单 如果我有 1gb 内存并且我想计算 2gb 文件的 md5 哈希值怎么办 目前 我正在这样做 private static string Md5Hash byte input byte hash MD5 Crea
  • 字节和整数以及串联和 python

    我有 2 个 32 位无符号整数 777007543 和 114997259 和字节串 0x47 0x30 0x22 0x2D 0x5A 0x3F 0x47 0x58 我如何让 python 给我这 3 个的串联 这样我就有 0x2E 0x
  • 计算文件的 MD5 校验和

    我在用着iTextSharp https en wikipedia org wiki IText从 PDF 文件中读取文本 但是 有时我无法提取文本 因为 PDF 文件仅包含图像 我每天都会下载相同的PDF文件 我想看看PDF是否被修改过
  • Python 2.7 不再工作:无法导入名称 md5

    我昨天在我的服务器 ubuntu 14 04 上安装了 python 3 6 3 现在我无法运行 python 2 7 在虚拟环境和 主环境 上 我一直在谷歌上寻找这个 但没有成功 我尝试重新安装 openssl 因为我是红色的 谁能帮我
  • 单向哈希函数如何工作? (已编辑)

    我阅读了有关 md5 哈希的维基百科文章 但我仍然无法理解哈希如何无法 重构 回原始文本 有人可以向对密码学知之甚少的人解释一下它是如何工作的吗 该函数的哪一部分使其成为单向的 由于到目前为止每个人都简单地定义了哈希函数是什么 所以我会咬牙
  • Python 2 与 3。相同的输入,不同的结果。 MD5 哈希值

    Python 3 代码 def md5hex data return hex string of md5 of the given string h MD5 new h update data encode utf 8 return b2a
  • MySQL:使用附加哈希字段的唯一文本字段

    在我的 MySQL 数据库中 我有一个表定义如下 CREATE TABLE mytablex cs id mediumint 8 unsigned NOT NULL AUTO INCREMENT tag varchar 6 COLLATE
  • 如何在不使用文本字段的情况下在 MySQL 数据库中存储哈希值

    我正在存储独特的用户代理在 MySQL MyISAM 表中 因此当我必须查看它是否存在于表中时 我会检查md5 hash它存储在 TEXT 字段旁边 User Agents id INT user agent TEXT hash VARCH
  • 从computeDigest(algorithm, value) byte[] 获取字符串表示形式

    Google App Script 函数computeDigest 返回签名的字节数组 如何获取摘要的字符串表示形式 我已经尝试过 bin2String 函数 function sign var signature Utilities co
  • 可以从 Base64 字符串中删除等号吗?

    我有一个字符串 我将其编码为 Base64 以节省空间 如果我去掉最后的等号有什么大不了的吗 这会显着降低熵吗 我该如何确保结果字符串的长度是固定的 gt gt gt base64 b64encode combined digest alt
  • Tomcat Digest 与 Manager WebApp

    我正在尝试为 tomcat 管理器应用程序设置摘要密码 我有
  • 使用 powershell 对整个目录进行 MD5 校验和哈希

    我正在尝试使用 powershell 为整个目录生成 MD5 校验和 在 Linux 上 有一个非常有效的 1 liner 如下所示 tar cf 某个目录 md5和 我了解到 tar 现在是 Windows 10 的一部分 并且可以在 P
  • Perl 中的 SHA256 摘要

    我需要对电子邮件地址进行 SHA256 哈希 并且需要将结果作为字符串 我尝试了以下方法 use Digest SHA qw sha256 my data swara email protected cdn cgi l email prot
  • C#计算打开文件的MD5?

    如何计算进程打开或使用的文件的 MD5 哈希值 文件可以是 txt 或 exe 我当前的代码返回 exe 错误 因为它正在运行 这是我当前的代码 public static string GetMd5HashFromFile string
  • MD5 输入/输出的最大长度

    可以进行 md5 哈希处理的字符串的最大长度是多少 或者 如果没有限制 如果有 md5 输出值的最大长度是多少 MD5 将任意长度的消息处理为 128 位的固定长度输出 通常表示为 32 个十六进制数字的序列
  • 您能解释一下 md5 和 modulo 的这些令人不安的异常情况吗?

    好吧 标题确实很主观 但这正是我的问题所在 背景是我想将静态 Web 内容的点击均匀地分布在定义数量的缓存服务器上 此外 向客户端的交付应该会加快 因为多个域正在使用中并且请求不会相互阻塞 我也不需要经典的负载均衡器 而是立即在我的 htm
  • Oracle 中的 MD5 (DBMS_OBFUSCATION_TOOLKIT.MD5)

    我正在尝试编写一个函数 从我到处收集的位中获取 MD5 哈希值 我想获得哈希的小写十六进制表示 到目前为止我有这个 CREATE OR REPLACE FUNCTION MD5 CADENA IN VARCHAR2 RETURN DBMS
  • MD5 是否保证可与 Android 中的 MessageDigest 一起使用?

    我想知道 MD5 摘要算法是否保证在所有 Android 设备中可用 然后再直率地忽略已检查的异常MessageDigest getInstance MD5 可以扔 我越来越java security NoSuchAlgorithmExce
  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa

随机推荐

  • 如何更新anaconda中的所有库(包含自定义环境更新)

    更新base环境下的所有库直接按照以下代码 以管理员身份启动 Anaconda Prompt 升级conda 升级Anaconda前需要先升级conda conda update conda 升级anaconda conda update
  • GBDT模型原理及Python案例分析

    GBDT模型原理及Python案例分析 Gradient Boosting Decision Trees GBDT 是一种常用的机器学习方法 它可以应用于回归和分类问题 相比于其他机器学习模型 GBDT模型具有更高的精确度和更好的泛化能力
  • STM32 进阶教程 12 - M4的硬件乘法器使用

    前言 Cortex M4支持硬件浮点运算单元 有些厂商直接说成DSP模块 本节将给大家介绍STM32F407芯片中硬件浮点运算单元中的使用及带来的性能对比 示例详解 基于硬件平台 正点源子的stm32f4 探索者开发板 MCU 的型号是 S
  • 华为OD机试真题-挑选字符串【2023.Q1】

    题目描述 给定a z 26个英文字母小写字符串组成的字符串A和B 其中A可能存在重复字母 B不会存在重复字母 现从字符串A中按规则挑选一些字母可以组成字符串B挑选规则如下 1 同一个位置的字母只能挑选一次 2 被挑选字母的相对先后顺序不能被
  • Unity中两种播放器

    一 Animator动画播放器 1 简单搭建UI 通过Slider来控制Cube当前状态动画的播放 2 给Cube加上Animator组件 做两个简单的动画 随便做个来回移动的动画就行 注意要关闭动画的循环播放 3 给摄像机挂在脚本 并拖拽
  • sql注入漏洞测试2(初级篇)--为了女神小芳^o^

    今天的的靶场是来自封神台的一个sql注入靶场 图片如下 点击进入传送门 结果如下图所示 先观察网站的url 查看是否有sql注入特征的信息 结果发现没有什么有用信息 但是图片下面有一个超链接 点进去看看 进去之后看到了网站的url有我们想要
  • C++ 数组详解

    C 支持数组数据结构 它可以存储一个固定大小的相同类型元素的顺序集合 数组是用来存储一系列数据 但它往往被认为是一系列相同类型的变量 1 数组初始化 2 char 数组 3 指针 动态数组 1 数组初始化 在 C 中要声明一个数组 需要指定
  • ENVI汉化教程

    ENVI 5 3汉化教程 向上兼容 提示 此教程用的是官方的方法 非第三方的插件 此办法仅适用于ENVI5 3以上的版本 前言 ENVI The Environment for Visualizing Images 是一个完整的遥感图像处理
  • 欧科云链OKLink全新推出Onchain AML服务 助力新金融合规健康发展

    据香港大公报报道 为期两天的全球高端经济峰会2023格林威治经济论坛 GreenwichEconomicForum 下称GEF论坛 于6月15日在香港交易所举办 欧科云链控股有限公司 下称 欧科云链 股票代码 01499 HK 受邀出席 并
  • Object slicing(对象切片)

    关于对象切片Thinking in C 中有这么一段话 If you upcast to an object instead of a pointer or reference something will happen that may
  • Unity3D游戏开发--基础游戏 SpaceShooter学习笔记(运动、销毁相关脚本)

    运动 销毁相关脚本 角速度脚本 直线运动脚本 陨石子弹回收脚本 击中销毁脚本 爆炸效果的回收 陨石移动分为直线运动和旋转 因为子弹的发射也是直线运动 所以直线运动和旋转分开 写两个脚本 子弹和陨石的直线运动公用一个脚本 角速度脚本 usin
  • Shell--基础--10--test命令

    Shell 基础 10 test命令 1 介绍 用于检查某个条件是否成立 可以进行数值 字符和文件的测试 2 数值测试 2 1 案例1 bin bash 定义变量 num1 100 num2 100 if test num1 eq num2
  • selenium webdriver 开启网页失败,被发现为爬虫,的解决办法

    1 换用火狐浏览器 2 隐藏谷歌浏览器中的特殊变量值 from selenium import webdriver options webdriver ChromeOptions 防止被检测 旧版本用法 1 chrome在79版之前用这个
  • 虚拟机VMware中实现linux与windows的共享

    方法有很多 今天讲解一下用linux操作系统中自带的samba服务器实现 使用samba服务器实现 类似于2台计算机通过网络远程访问来实现文件共享 即 虚拟机VMware中的linux计算机和本地windows计算机 samba是在linu
  • 嵌入式硬件通信接口协议-IIC(二)分层架构设计模拟接口

    文章首发于同名微信公众号 DigCore 欢迎关注同名微信公众号 DigCore 及时获取最新技术博文 原文链接 https mp weixin qq com s jFxic0iOet rIlWi3is8eQ 关于分层设计的思想 在之前的一
  • 前端轮播图插件Swiper使用新手详细教程

    Swiper应用广泛 使用频率仅次于jQuery 轮播图类排名第一 是网页设计师必备技能 大量demo即下即用 前端新手亦可快捷做出精美效果 使用Swiper swiper官网链接 1 进入官网 点击开始使用 2 下载Swiper 1 点击
  • 数字图像处理-Matlab实现图像边缘检测

    1 边缘检测函数 1 1Sobel算子边缘检测 function OutImage SobelOperate InputImage Direction 功能 Sobel边缘检测 参数 InputImage为输入单通道图像 Dirction为
  • 【python正则表达式 实战示例】求数组全部相邻数据

    本节利用python的正则表达式快速求解数组中相邻数据的位置 含完整的python源码 求解过程和正则表达式详细解析 1 求解步骤 1 生成随机数据 x 用于输入与测试 2 对原始数据进行从小到大排序 对排序后的数组利用numpy diff
  • windows下编译proj库

    编译sqlite 下载地址 SQLite Download Page 把sqlite amalgamation XXXXX zip sqlite tools win32 x86 XXXXX zip sqlite dll win32 x86
  • STM32 基础系列教程 47 - MD5

    前言 MD5消息摘要算法 英语 MD5 Message Digest Algorithm 一种被广泛使用的密码散列函数 可以产生出一个128位 16字节 的散列值 hash value 用于确保信息传输完整一致 MD5由美国密码学家罗纳德