0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

md5的算法步骤及应用

姚小熊27 来源:网络整理 作者:网络整理 2020-11-16 16:01 次阅读

md5的算法步骤

按位补充数据

在MD5算法中,首先需要对信息进行填充,这个数据按位(bit)补充,要求最终的位数对512求模的结果为448。也就是说数据补位后,其位数长度只差64位(bit)就是512的整数倍。即便是这个数据的位数对512求模的结果正好是448也必须进行补位。补位的实现过程:首先在数据后补一个1 bit; 接着在后面补上一堆0 bit, 直到整个数据的位数对512求模的结果正好为448。总之,至少补1位,而最多可能补512位 。

扩展长度

在完成补位工作后,又将一个表示数据原始长度的64 bit数(这是对原始数据没有补位前长度的描述,用二进制来表示)补在最后。当完成补位及补充数据的描述后,得到的结果数据长度正好是512的整数倍。也就是说长度正好是16个(32bit) 字的整数倍 。

初始化MD缓存器

MD5运算要用到一个128位的MD5缓存器,用来保存中间变量和最终结果。该缓存器又可看成是4个32位的寄存器A、B、C、D,初始化为 :

A : 01 23 45 67

B: 89 ab cd ef

C: fe dc ba 98

D: 76 54 32 10

处理数据段

首先定义4个非线性函数F、G、H、I,对输入的报文运算以512位数据段为单位进行处理。对每个数据段都要进行4轮的逻辑处理,在4轮中分别使用4个不同的函数F、G、H、I。每一轮以ABCD和当前的512位的块为输入,处理后送入ABCD(128位)。

输出

信息摘要最终处理成以A, B, C, D 的形式输出。也就是开始于A的低位在前的顺序字节,结束于D的高位在前的顺序字节。

md5应用

用于密码管理

当我们需要保存某些密码信息以用于身份确认时,如果直接将密码信息以明码方式保存在数据库中,不使用任何保密措施,系统管理员就很容易能得到原来的密码信息,这些信息一旦泄露, 密码也很容易被破译。为了增加安全性,有必要对数据库中需要保密的信息进行加密,这样,即使有人得到了整个数据库,如果没有解密算法,也不能得到原来的密码信息。MD5算法可以很好地解决这个问题,因为它可以将任意长度的输入串经过计算得到固定长度的输出,而且只有在明文相同的情况下,才能等到相同的密文,并且这个算法是不可逆的,即便得到了加密以后的密文,也不可能通过解密算法反算出明文。这样就可以把用户的密码以MD5值(或类似的其它算法)的方式保存起来,用户注册的时候,系统是把用户输入的密码计算成 MD5 值,然后再去和系统中保存的 MD5 值进行比较,如果密文相同,就可以认定密码是正确的,否则密码错误。通过这样的步骤,系统在并不知道用户密码明码的情况下就可以确定用户登录系统的合法性。这样不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。

电子签名

MD5 算法还可以作为一种电子签名的方法来使用,使用 MD5算法就可以为任何文件(不管其大小、格式、数量)产生一个独一无二的“数字指纹”,借助这个“数字指纹”,通过检查文件前后 MD5 值是否发生了改变,就可以知道源文件是否被改动。我们在下载软件的时候经常会发现,软件的下载页面上除了会提供软件的下载地址以外,还会给出一串长长的字符串。这串字符串其实就是该软件的MD5 值,它的作用就在于下载该软件后,对下载得到的文件用专门的软件(如 Windows MD5 check 等)做一次 MD5 校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用 MD5 算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面 。

垃圾邮件筛选

在电子邮件使用越来越普遍的情况下,可以利用 MD5 算法在邮件接收服务器上进行垃圾邮件的筛选,以减少此类邮件的干扰,具体思路如下:

建立一个邮件 MD5 值资料库,分别储存邮件的 MD5 值、允许出现的次数(假定为 3)和出现次数(初值为零)。

对每一封收到的邮件,将它的正文部分进行MD5 计算,得到 MD5 值,将这个值在资料库中进行搜索。

如未发现相同的 MD5 值,说明此邮件是第一次收到,将此 MD5 值存入资料库,并将出现次数置为1,转到第五步。

如发现相同的 MD5 值,说明收到过同样内容的邮件,将出现次数加 1,并与允许出现次数相比较,如小于允许出现次数,就转到第五步。否则中止接收该邮件。结束。

接收该邮件。
责任编辑:YYX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4459

    浏览量

    90768
  • md5
    md5
    +关注

    关注

    0

    文章

    28

    浏览量

    20795
收藏 人收藏

    评论

    相关推荐

    Linux中文件MD5校验方法

    由于生成的md5信息中,每个md5值后都紧跟着对应的文件的路径(可能是相对路径),于是将生成的md5保存到某个文件中,以后可以使用该文件来检查md5值对应文件内容是否发生了修改。
    发表于 04-22 12:40 71次阅读

    stm32写BootLoader程序遇到的几个问题求解

    我最近在写一个BootLoader程序,以前没有接触过md5和mbedtls,有些疑问。现在我需要使用md5校验文件完整性,但是官方的md5库需要依赖mbedtls库,mbedtls库必须
    发表于 03-28 07:48

    如何对MD5加密算法优化?

    有人针对程序安全启动过程,进行MD5算法的优化嘛。目前采用标准算法,时间稍长,如果有人做过优化的话,可以分享一下,谢谢。
    发表于 02-18 08:20

    MD5500电源及配套设备安装

    电子发烧友网站提供《MD5500电源及配套设备安装.pdf》资料免费下载
    发表于 11-13 14:27 0次下载
    <b class='flag-5'>MD</b>5500电源及配套设备安装

    求助,如何把一串字符串运算转化成定长字符串?

    一般来说单片机的UID是96位,NRF24L01的通信是五位16进制数,使用什么算法能运算成可以使用的地址? 同时又保证唯一性,降低重复率? 比如MD5这样的算法,但是要MD5加密后的
    发表于 11-01 07:52

    Linux获取文件MD5码命令md5sum详解

    md5sum 用于计算和校验文件的MD5值。
    的头像 发表于 10-27 11:20 1357次阅读
    Linux获取文件<b class='flag-5'>MD5</b>码命令<b class='flag-5'>md</b>5sum详解

    EEMD方法的原理与算法实现步骤

    电子发烧友网站提供《EEMD方法的原理与算法实现步骤.pdf》资料免费下载
    发表于 10-23 11:44 0次下载
    EEMD方法的原理与<b class='flag-5'>算法</b>实现<b class='flag-5'>步骤</b>

    教你用 Python制作确保视频的原创性和唯一性

    ,如果直接搬运,都会面临着一些未知风险 本篇将带大家用 Python 对短视频做一些特殊处理,保证视频的 原创性 和 唯一性 2. 实现 下面将从 MD5、光线、色彩 3 个方面来进行说明 第 1 步,修改视频的 MD5MD5
    的头像 发表于 10-21 11:37 442次阅读

    【开源三方库】crypto-js加密算法库的使用方法

    crypto-js已支持的算法有:MD5、SHA-1、SHA-256、HMAC、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、PBKDF2、AES、RC4、DES等。 特点 • 安全性
    发表于 09-08 15:10

    【开源三方库】crypto-js加密算法库的使用方法

    三方库。 crypto-js是一个加密算法类库,可以非常方便地在前端进行其所支持的加解密操作。目前crypto-js已支持的算法有:MD5、SHA-1、SHA-256、HMAC、
    的头像 发表于 09-07 21:10 531次阅读

    请问arm-none-eabi-gcc去哪里设定malloc的最大stack大小?

    的 0x00000800和 0x00000100这两个值, 最后编译出来的hex的md5(哈希校验值) 跟改之前编译的hex的md5 一样, 我就在想, 会不是是哪里定义了这两个变量
    发表于 08-28 07:54

    296集(53.5#100)趣谈单向加密算法:HASH 与 MD5

    嵌入式C语言函数
    于振南的单片机世界
    发布于 :2023年08月22日 14:35:46

    怎么知道RT-Thread的CRYPTO设备对M2354支持怎样呢?

    前面碰到了一个问题,RT-Thread 支持 MD5,可是 M2354 却不支持,那怎么知道 RT-Thread 的 CRYPTO 设备对 M2354 支持怎样呢?
    的头像 发表于 07-27 15:21 575次阅读
    怎么知道RT-Thread的CRYPTO设备对M2354支持怎样呢?

    arm-none-eabi-gcc工具链去哪里设定malloc的最大stack的大小?

    的 0x00000800和 0x00000100这两个值, 最后编译出来的hex的md5(哈希校验值) 跟改之前编译的hex的md5 一样, 我就在想, 会不是是哪里定义了这两个变量
    发表于 06-27 06:40

    esptool.FatalError:文件的MD5与闪存中的数据不匹配怎么处理?

    给了我以下错误“文件的 MD5 与闪存中的数据不匹配!” 获得的 NodeMCU 固件来刷新它这也没有用。我试过重置闪光灯,但没有任何效果……有没有人有过类似的经历?另外,我不记得我上次上传的代码,但我记得我可能已经刷过 Esp8266 Deauther。谢谢!
    发表于 05-25 06:17