• MD5加密——原理介绍


    概述

    MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。

    • MD(Message Digest):消息摘要

    特点

    一个MD5理论上可能对应无数多个原文的,比如主流使用的MD5将任意长度的“字节串映射为一个128bit的大整数。也就是一共有2^128种可能,大概是3.4*10^38,这个数字是有限多个的,但是世界上可以被用来加密的原文则有无数的可能性。

    性质

    1、压缩性:任意长度的数据,算出的MD5值长度都是固定的(相当于超损压缩)。

    2、容易计算:从原数据计算出MD5值很容易。

    3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

    4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

    5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

    算法描述

    MD5算法的处理步骤可以概括为三步:数据填充、分组循环变换、拼接输出。

    1.数据填充

    • 先在原文填充一个“1”,后面加上k个“0”。其中k是满足(n+1+k) mod 512 = 448的最小正整数。(首先我们一定要在最后先补一个1,当原始长度mod512等于447,那么只需要填充1位也就是填充的1;当原始长度mod512等于448,先填了一个1,那么要想满足mod 512等于448,则还需要填充511个0,也就是总共需要填充512个位)
    • 这里的512、448是“位”为单位,转成“字节”就是64、56,即mod 64 == 56 mod 64
    • 追加64位的数据长度(bit为单位,小端序存放)

    2.分组循环变换 

    PS:这个网上的资料实在没看懂,想知道远离的参考:消息摘要算法MD5图解及C语言实现 - 知乎

    3.拼接输出

    这里用一句话概括:将经过若干次循环变换后的A、B、C、D以十六进制的形式拼接起来,就是传说中的MD5码了。 

    应用领域

    我的应用主要用来对单片机升级文件的一个校验,校验给到用户手上的文件没有被修改过。

  • 相关阅读:
    【机器学习科学库】全md文档笔记:Matplotlib详细使用方法(已分享,附代码)
    程序员自由创业周记#12:999%
    单片机C语言实例:3、数码管累加与累减动态显示
    Nginx网站服务
    c++ 内存顺序
    活动安排问题(贪心算法)
    GIS跟踪监管系统信息查询
    AOP面向切面编程
    初学者入门机器学习 (ML)的推荐教程
    大数据Apache Druid(八):Druid JDBC API和其他OLAP分析框架对比
  • 原文地址:https://blog.csdn.net/qq_38591801/article/details/127506081