MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。
一个MD5理论上可能对应无数多个原文的,比如主流使用的MD5将任意长度的“字节串映射为一个128bit的大整数。也就是一共有2^128种可能,大概是3.4*10^38,这个数字是有限多个的,但是世界上可以被用来加密的原文则有无数的可能性。
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的(相当于超损压缩)。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
MD5算法的处理步骤可以概括为三步:数据填充、分组循环变换、拼接输出。
PS:这个网上的资料实在没看懂,想知道远离的参考:消息摘要算法MD5图解及C语言实现 - 知乎
这里用一句话概括:将经过若干次循环变换后的A、B、C、D以十六进制的形式拼接起来,就是传说中的MD5码了。
我的应用主要用来对单片机升级文件的一个校验,校验给到用户手上的文件没有被修改过。