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码了。
应用领域
我的应用主要用来对单片机升级文件的一个校验,校验给到用户手上的文件没有被修改过。
MD5加密——原理介绍相关推荐
- md5加密 原理 js 前后端使用
密码进行md5加密 原理分析:加密就是存进数据库的时候变成MD5存进去,解密,就是对比的时候,将用户输入的密码转换成MD5和数据库里面的对比.; 1.我们先来看hash算法:我们可以通过 crypto ...
- MD5加密原理解析及OC版原理实现
MD5加密原理解析及OC版原理实现 一.MD5算法基础概念 MD5算法是Hash算法的一种,叫做讯息摘要演算法.所谓摘要,从字面意思理解,是指内容的大概.在MD5算法中,这个摘要是指将任意数据映射成一 ...
- Md5加密原理及其实现算法
MD5加密算法: MD5加密算法全称是Message Digest algorithm 5,它是一种不可逆的加密算法,即使知道源码也不能破译秘钥,主要用来验证密码,使用时,首先将密码采用Md5加密,M ...
- md5加密原理!!!【转】
MD5简介 MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来 ...
- md5加密原理 MD5简介
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! MD5简 ...
- 前端JavaScript代码混淆加密原理介绍
因为JavaScript大都是运行在浏览器端,这就导致任何人都可以直接对网站的代码进行查看,如果代码没有进行任何处理就会导致直接暴露源码,他人便可轻而易举的复制你的劳动成果,但是由于没有纯粹的加密方案 ...
- md5加密原理简单解释
转载自:https://www.cnblogs.com/second-tomorrow/p/9129043.html 本文将通过漫画的形式来通俗易懂的讲述什么是MD5加密算法(Message Dige ...
- 加密算法---RSA 非对称加密原理及使用
加密算法---RSA 非对称加密原理及使用 一 非对称加密原理介绍 二 加密解密测试 2.1 加密解密工具类 2.2 测试 一 非对称加密原理介绍 非对称加密算法中,有两个密钥:公钥和私钥.它们是一对 ...
- md5加密后不能解密
MD5加密原理是散列算法,散列算法也称哈希算法. 计算机专业学的数据结构就有哈希表这一知识点. 比如10除以3余数为一,4除以3余数也为一,但余数为一的就不知道这个数是哪个了. 所以md5不能解密. ...
最新文章
- LeetCode-笔记-112、路径总和
- windows Azure
- 数字IC—FPGA同行交流
- 神经网络变学习率算法代码_机器学习算法之神经网络
- 指数加权平均与RmsProp(转载+自己总结)以及Adagrad
- 线性代数导论5——SVD分解
- PyTorch | torch.randperm()使用方法
- 易车与中国海洋报社达成深度合作 开拓海洋主题汽车内容
- 「管理数学基础」1.2 矩阵理论:线性映射、线性变换T的矩阵表示
- Android ViewFlipper源码分析
- php_l3arning_notes_2
- 利用matlab描点绘制平滑曲线
- java之继承 封装 多态
- 阿铭Linux_网站维护学习笔记201903021
- 微信公众号 接口配置
- PC端浏览器定位(纯前端)
- (毕业设计资料)基于单片机汽车自动照明灯超远近光灯设计
- ubuntu使用deepin-wine安装微信出现版本过低问题的解决
- STM32与Flash AT45DB321D之间读写数据
- Ubuntu开机启动黑屏,只有鼠标
热门文章
- 游程编码压缩及解压缩
- Linux下qt/C++全局键盘监控,处理键盘事件,输出按键码
- 3轴/6轴/9轴传感器是什么, 加速计/陀螺仪/磁力计又是什么?
- pion:rtc-to-webrtc示例
- 明日之后营地14庄中式风房子上线,网友:都是氪金大佬
- iPhone开发基础教程笔记(二)--第三章 处理基本交互
- 【vue】设置网页的标题和图标
- 寻找与疾病相关的SNP位点——R语言从SNPedia批量提取搜索数据
- Python 第三方模块 机器学习 Scikit-Learn模块 有监督学习1 交叉分解,高斯过程,保序回归
- java写华容道_基于java的华容道小游戏