MD5 加密

article/2025/9/23 18:27:44

什么是MD5算法

MD5 信息摘要演算法(Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致。

MD5功能

输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);
不同的输入得到的不同的结果(唯一性);

MD5属不属于加密算法

认为不属于的人是因为他们觉得不能从密文(散列值)反过来得到原文,即没有解密算法,所以这部分人认为MD5只能属于算法,不能称为加密算法;
认为属于的人是因为他们觉得经过MD5处理后看不到原文,即已经将原文加密,所以认为MD5属于加密算法;我个人支持前者,正如认为BASE64算法只能算编码一样。

MD5算法是否可逆?

MD5不可逆的原因是其是一种散列函数,使用的是hash算法,在计算过程中原文的部分信息是丢失了的。

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

不过需要注意的一点是,尽量这是一个理论上的有限对无限,不过问题是这个无限在现实生活中并不完全成立,因为一方面现实中原文的长度往往是有限的(以常用的密码为例,一般人都在20位以内),另一方面目前想要发现两段原文对应同一个MD5(专业的说这叫杂凑冲撞)值非常困难,因此某种意义上来说,在一定范围内想构建MD5值与原文的一一对应关系是完全有可能的。所以对于MD5目前最有效的攻击方式就是彩虹表

MD5相当于超损压缩。

MD5用途

1.防止被篡改:
1)比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。
2)比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。
3)SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.

2.防止直接看到明文:
现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码。(比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。)

3.防止抵赖(数字签名):
这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。

MD5安全性

普遍认为MD5是很安全,因为暴力破解的时间是一般人无法接受的。实际上如果把用户的密码MD5处理后再存储到数据库,其实是很不安全的。因为用户的密码是比较短的,而且很多用户的密码都使用生日,手机号码,身份证号码,电话号码等等。或者使用常用的一些吉利的数字,或者某个英文单词。如果我把常用的密码先MD5处理,把数据存储起来,然后再跟你的MD5结果匹配,这时我就有可能得到明文。(碰撞

破解 

目前可以说 md5 已经基本被攻破了,一般的 MD5 的碰撞都可以在如下网上获取到

  • md5在线解密破解,md5解密加密
  • md5解密|md5在线解密 - 全球唯一8位小写+数字全收录的解密网站
  • md5解密 MD5在线解密 破解md5
  • https://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip (生成指定前缀的 md5 碰撞)

MD5算法过程

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

一、填充:如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的长度就为N*512+448(bit);

二、记录信息长度:用64位来存储填充前信息长度(这样可以处理的数据已经足够大了--2^{64}bit=2^{61}B=2^{31}GB=2^{21}TB)。这64位加在第一步结果的后面,这样信息长度就变为N*512+448+64=(N+1)*512位。

三、装入标准的幻数(四个整数):标准的幻数(物理顺序)是

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

如果在程序中定义应该是:
A=0x67452301,B=0xEFCDAB89,C=0x98BADCFE,D=0x10325476

当然你写程序的时候还是直接让A=01234567.......

这里是因为计算机储存的方式问题(大小端) 

对于一个由2个字节组成的16位整数,在内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;另一种方法是将高序字节存储在起始地址,这称为大端(big-endian)字节序。

假如现有一32位int型数0x12345678,那么其MSB(Most Significant Byte,最高有效字节)为0x12,其LSB (Least Significant Byte,最低有效字节)为0x78,在CPU内存中有两种存放方式:(假设从地址0x4000开始存放)

总结:

大端是高字节存放到内存的低地址

小端是高字节存放到内存的高地址

四、MD5 py实现

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

在python3的标准库中,关于hash加密算法都放在hashlib这个标准库中,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。
 

import hashlib# 待加密信息
str = 'this is a md5 Test.'# 创建md5对象
hl = hashlib.md5()# Tips
# 此处必须声明encode
# 若写法为hl.update(str) 报错为: Unicode-objects must be encoded before hashing
hl.update(str.encode(encoding='utf-8'))print('MD5加密前为 :' + str)
print('MD5加密后为 :' + hl.hexdigest())


http://chatgpt.dhexx.cn/article/eb67Pu2k.shtml

相关文章

MD5算法详解

0x00 前言 MD5是一种哈希算法,用来保证信息的完整性。 就一段信息对应一个哈希值,且不能通过哈希值推出这段信息,而且还需要保证不存在任意两段不相同的信息对应同一个哈希值。不过MD5算法算出来的值也就16个字节(16*8128&#x…

跟庄买股票得新技巧(2023.05.16)(绝密资料,只发一次)

昨天学了一个跟庄买卖股票的得新技能 统计昨天庄家异动的情况,按照行业分类(板块)板块对涨幅进行排序,涨幅排名分前三的是,龙头一,龙头二,龙头三买卖规则:看龙一,玩龙二…

股票策略 —— 指数择时 + 因子选股1

1、概述 我们希望建立一个择时策略 因子选股的复合策略,因为指数择时无法直接落地,而单纯的因子选股策略,回撤太大。本贴观察其效果。 2、策略规则 1、大盘指数择时,有持仓信号时,采用某量价因子筛选指数成份股&am…

md5加密算法

md5是什么? md5是一种信息摘要算法(message-digest algorithm 5 ),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用来确保信息传输完整一致性。 特点 不可逆 …

bat表白脚本(变色桃心+vbs问答)

今天520,女朋友在抖音上看人家一个html代码就可以实现非常炫酷的表白效果,真是外行看热闹,内行看笑话!!! 殊不知html代码是引用的本地.js等各种文件才能完成,对于非前端开发人员来说想写成很难。 本人分享两个非常简单的表白编辑代码(bat+vbs) 一、bat 效果(变色桃…

表白代码

vbs脚本表白代码 代码一、做我女朋友非同意不可 msgbox ("我有一件事想跟你说"),vbQuestion,("在吗?") msgbox ("自从第一天遇见你,我便对你难以忘怀了!") msgbox ("做我女朋友好吗?")…

抖音java表白教程_抖音vbs表白代码制作方法分享

抖音vbs表白代码在整个制作教程需要对代码的写入有一定的认知,对于具体的教程内容,下面一起来看看相关的介绍吧。 抖音vbs表白代码制作教程 步骤一: 在电脑上新建一个txt文件。 步骤二: 打开txt文件,复制以下代码粘贴进…

抖音记事本代码html,抖音记事本vbs弹窗表白代码怎么弄的?附教程

抖音记事本vbs弹窗表白代码怎么弄的?附教程 2018-06-20 10:14:07 来源:cr173.com 扫码可以: 1.在手机上浏览 2.分享给微信好友或朋友圈 摘要: 抖音上有很多新奇的玩法,比如最近就很火的就是利用弹窗表白噢! 抖音上有很…

html表白树代码程序怎么调,抖音表白弹窗vbs代码怎么制作 表白树特效程序代码教程详细介绍...

最近抖音上面很火的一个vbs的表白代码玩法很流行,这算是技术宅专用表白方式了,想要跟自己喜欢的人表白的小伙伴们快来看看了。下面小编给大家分享一下抖音表白弹窗代码。 两个代码例子分享给各位: 1.msgbox(“做我女朋友好吗?\") msgbo…

java整人代码大全_整人代码vbs大全分享

整人代码vbs大全分享 vbs制作方法 1、在记事本中粘贴vbs代码; 2、另存为vbs文件,双击即可运行。 以下是分享的一些代码 重要提示:关机和死机的代码自己玩玩就可以了,发给别人实在有点缺德,万一别人有重要的东西没保存自己可能要负相应的后果。 一、做我女朋友吗,告白(抖音…

简单制作vbs 对话框表白

右击桌面新建一个文本文档输入:msgbox("做我女朋友好吗?") msgbox("房产证写你名字...") msgbox("保大") msgbox("我妈会游泳") Xmsgbox("做我女朋友好不好",VBOKCancel) if xVBOK then msgbox("…

抖音快手vbs表白代码大全(操作方法)

抖音快手vbs表白代码大全使用方法 前言步骤一:步骤二:步骤三、步骤四、注意事项 总结 前言 作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、…

VBS表白代码以及一些注意事项

第一步:新建一个文本文档 第二步:命名为:表白代码.txt 第三步:输入一下代码: msgbox("做我女朋友好吗?") msgbox("房子写你的名字") msgbox("保大") msgbox("我妈妈会…

【欢迎白嫖】新·vbs表白代码

新vbs表白代码 前言 之前有在B站上发布过一个表白代码的视频,但是貌似Bug多的让人心痛,所以,今天返璞归真,重新做了一个表白代码,欢迎各位批评指正! 分析问题 对于上一版的代码,我总结出了以…

java整人的代码_「vbs代码」vbs表白代码+整人代码,抖音vbscript表白代码 - seo实验室...

vbs代码 步骤一: 在电脑上新建一个txt文件 步骤二:将以下代码复制过去(中文可以改) const title “爱情测试” const yourname “嫦娥” const question “你最喜欢的人是谁?请在下面的方框中输入他(她)的名字。” const info “你在说谎…

抖音txt表白html,抖音vbs表白代码的技巧分享

今天小编分享一篇关于抖音vbs表白代码的技巧,有兴趣的可以来了解了解看看哦。 抖音vbs表白代码的技巧分享 抖音vbs表白代码制作教程 步骤一: 在电脑上新建一个txt文件。 步骤二: 打开txt文件,复制以下代码粘贴进去(可以修改中文部…

html自动增加vbs代码,vbs烟花代码

比如关机代码.和一些常用代码 首先在电脑鼠标右键 新建一个文本文档。 然后点开文本文档进行编辑,最重要的一个代码就是msgbox,然后在后面添加想要说的话,但是要使用英文标点符号,换行时候都需要在前面加上代码,最后保存。 我不要整人什么的,我要的是类似翻译的,还有句型…

vbs无法拒绝的表白代码

Case 6 j1 Case 7 msgbox(“再给你一次机会”) end Select loop msgbox(“我就知道你会同意的,哈哈哈哈”) 电脑桌面上新建一个txt文本,代码复制进去后需要修改编码格式(文件>另存为>编码改为ANSI),然后保存…

情人节——vbs的学习(句子、情话)

文章目录 一、藏匿情话二、vbs脚本表白代码代码1:做我女朋友非同意不可代码2:做我女朋友不同意就关机代码3:做我女朋友,即使不同意因为更爱你所以撤销关机代码4:爱情测试代码5:求对象原谅 三、web网页表白程…

VBScript之表白代码(有运行视频)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言这是一个基于VBScript的表白脚本,有需要请自取! 一、VBS是什么?二、脚本演示三、源代码 前言 这是一个基于VBScript的表白脚…