MD5算法

简介

  MD5消息摘要算法(MD5 Message-Digest Algorithm),是一种被广泛使用的加密算法。该算法讲任意的输入处理之后,输出一个128位的数据指纹,理论上这个信息指纹是独一无二的,因此我们可以通过验证文件传输前后的MD5值是否一致来验证文件信息是否被篡改。

生成MD5的过程

MD5是以512位分组来处理输入的信息,每一个分组被划分为16个32位子分组,经过一系列处理之后,算法的输出变成了4个32位分组,将这4个分组组合,即得到一个128位的散列值,即MD5值,也就是我们的数据指纹。

(1)填充

  如果原始输入的bit长度对512取余的结果不是448,就需要进行填充,从而使得取余的结果是448,填充的方法是填充一个1和n个0,则填充完成之后,原始输入信息的bit长度变成了N*512+448。

(2)记录信息长度

  我们使用64bit来存储填充前的信息长度,则现在的长度变为了N*512+448+64=(N+1)*512。

(3)装幻数

  在这里我们需要装入四个标准幻数:

  A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。

可以转化为:   A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L。

(4)四轮循环运算

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

工具 | Python数据结构:树的基本概念

树的例子 树(Tree)在计算机科学里应用广泛,包括操作系统,图形学,数据库和计算机网络。树和真正的树有许多相似的地方,也包括根、树枝和叶子,它们的不同在于计算...

17810
来自专栏coolblog.xyz技术专栏

Dubbo 源码分析 - 自适应拓展原理

我在上一篇文章中分析了 Dubbo 的 SPI 机制,Dubbo SPI 是 Dubbo 框架的核心。Dubbo 中的很多拓展都是通过 SPI 机制进行加载的,...

562
来自专栏Java成神之路

JavaUtil_01_MD5加密

昨天做java微信开发,引用百度翻译API给公众号添加翻译功能时,需要使用MD5生成签名。注意,使用MD5生成签名后一定要转成小写,不然百度翻译后台不会认你这个...

814
来自专栏DannyHoo的专栏

IOS中的字典转模型2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

553
来自专栏用户2442861的专栏

Qt 学习之路 2(45):模型

http://www.devbean.net/2013/02/qt-study-road-2-model/

622
来自专栏Python疯子

TebsorFlow基本语法

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invi...

762
来自专栏Vamei实验室

纸上谈兵: 栈 (stack)

栈(stack)是简单的数据结构,但在计算机中使用广泛。它是有序的元素集合。栈最显著的特征是LIFO (Last In, First Out, 后进先出)。当我...

2065
来自专栏后端沉思录

自定义参数解析器

开发中,app端给服务端会传基础参数、其他参数,一般基础参数app端都会传给服务端,其他参数则是根据不同接口传不同参数。若以表单的形式提交的数据:

1093
来自专栏函数式编程语言及工具

Scalaz(46)- scalaz-stream 基础介绍

    scalaz-stream是一个泛函数据流配件库(functional stream combinator library),特别适用于函数式编程。sc...

1997
来自专栏Python小屋

Python使用两个Event对象同步生产者消费者问题

问题描述:如果缓冲区满则生产者等待,若空则生产者往缓冲区放置物品至缓冲区满;如果缓冲区空则消费者等待,若满则消费者从缓冲区获取物品进行消费直至缓冲区空。

883

扫码关注云+社区