MD5是什么?及其它的特点

article/2025/9/23 18:26:47

比较官方的解释大家可以百度,这里我说一下自己的理解。

一.作用:一般用于互联网一种数据的唯一性标识。

二.实体:本身是一个128位的0/1比特。一般被表示为16进制的字符串。4个比特位组成一个16进制字符,因此常常能见到的是(128/4=)32个16进制字符组成的字符串   4951 dd1c bff8 cbbe 4cd4 475c a939 fc8b,当然它实质是一种消息摘要算法

三.特点:

1.完全相同的一段数据,不论时间地点(加密算法相同的条件)加密出的32位的字符串完全相同。

2.加密过程本身就是一个有损的加密过程。因此几乎不能还原出原始数据。安全

补充:一般还原出原始数据都是使用碰撞的方式来还原。意思大概和穷举的意思一样,有足够多的原始数据量,世界上的所有数据用 1~n来表示,把1~n都用MD5计算一遍得1x~nx(x表示计算后得的数)。把1~n当成键值对,把1x~nx放入键值对当得到一个MD5字符串,通过值去找键,就知道是什么数据了。因为你本来就拥有数据,因此才能找到数据。但当你没有原始数据时,想通过128比特的玩意去恢复大于128比特的数据本身就是玩笑,数据量都不一样,至于原理有兴趣的朋友可以研究研究信息论。不想研究的可以回想回想之前学的香农公式。再从这一点去研究。又有大的世界。

3.散列能力巨强。安全

MD5工具类代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;public class MD5Utils {public static String getStringMD5(String str) {try {MessageDigest digest = MessageDigest.getInstance("MD5");return new String(encode(digest.digest(str.getBytes())));} catch (Exception e) {throw new RuntimeException("md5 digest fail:", e);}}public static String getFileMD5(File file) {FileInputStream in = null;try {MessageDigest digest = MessageDigest.getInstance("MD5");if (!file.isFile()) {throw new RuntimeException("md5 digest fail: file not exists!");}byte buffer[] = new byte[1024];int len;in = new FileInputStream(file);while ((len = in.read(buffer, 0, 1024)) != -1) {digest.update(buffer, 0, len);}return new String(encode(digest.digest()));} catch (Exception e) {throw new RuntimeException("md5 digest fail:", e);} finally {if (in != null) {try {in.close();} catch (IOException e) {}}}}private static final char[] HEX = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };public static char[] encode(byte[] bytes) {final int nBytes = bytes.length;char[] result = new char[2 * nBytes];int j = 0;for (int i = 0; i < nBytes; i++) {// Char for top 4 bitsresult[j++] = HEX[(0xF0 & bytes[i]) >>> 4];// Bottom 4result[j++] = HEX[(0x0F & bytes[i])];}return result;}}

当以上代码加密文件时。即使文件名不同,只要文件内容相同,加密出的MD5完全一致:

测试:

加密一个图片:

 

import java.io.File;
import utils.MD5Utils;public class MD5Test {public static void main(String[] args) {//MD5第一次运算 4951dd1cbff8cbbe4cd4475ca939fc8bSystem.out.println(MD5Utils.getFileMD5(new File("C:\\Users\\anxiaopei\\Desktop\\index.jpg")));//MD5第二次运算System.out.println(MD5Utils.getFileMD5(new File("C:\\Users\\anxiaopei\\Desktop\\index.jpg")));//MD5第三次运算System.out.println(MD5Utils.getFileMD5(new File("C:\\Users\\anxiaopei\\Desktop\\index文件名真的不同!.jpg")));//MD5第四次运算System.out.println(MD5Utils.getFileMD5(new File("C:\\Users\\anxiaopei\\Desktop\\index文件名真的不同!.jpg")));//1的MD5数为System.out.println(MD5Utils.getStringMD5("1"));}
}

结果:

对字符串1的加密,大家使用我的代码在你的机器上做了MD5运算后一定也能得到 c4ca4238a0b923820dcc509a6f75849b

第一次与第二次加密证明了,对相同的文件 不同的时间加密的出相同的MD5

第三四次加密与前两次相同证明在,文件的副本,哪怕文件名不一样,只要文件内容相同,加密的MD5也是相同的。

现在我们来做一个有趣的事。

把图片以记事本打开 更改其中一个字符。再次加密图片(改了一个字符,图片也会打不开,不要使用重要图片做测试),这次我们更改文件的副本里的一个字符。删掉添加更改都可以,随意。这次我就只改一个字符,把最后一个字符“ ? ”删掉。

删掉“?”后我的副本都不能预览了。

 用MD5运算后,可以看到第二行与第三行结果完全不一样,证明了它散列的能力。巨强!可以说百分之零点几的的差别也会导致MD5完全不一样。因此再不考虑碰撞的可能性下,只要两个数据的MD5相同,那我们可以认为这两个数据完全相同。

补充:什么是碰撞?:https://blog.csdn.net/qq_29519041/article/details/84404223

 

说了这么多知道了它唯一标识的能力很强。

既然他的唯一标识能力这么强。

那有个使用场景就是,用来作为文件的唯一标识。比如文件上传时,哪怕你的文件名不一样,经过MD5一下,服务器对比一下存在服务器的文件的MD5码表。就知道你上传的这个文件是否服务器已经存在,qq的秒传也是使用这个方法(我猜的)发现服务器有这个文件后,直接把服务器那个文件传给你要传的人。如果你是上传文件给服务器,那你也得到一个访问服务器那个文件的权限。因为服务器知道你上传的文件就是服务器存着的那个文件,这就是秒传的精髓。当然具体实现消息摘要算法的方式也许会不一样。也许是md其他什么的。

 


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

相关文章

抓强势股MACD大牛启动通达信指标公式 无未来 不加密

快速抓黑马强势股 好股不错过 利润翻倍的好指标 本指标能帮您快速缩小选股范围&#xff0c;紧盯信号&#xff0c;结合主力资金和主力活跃度来综合判断个股买点机会&#xff0c;强势个股精选&#xff0c;结合指标信号能快速参与强势个股回踩操作机会&#xff0c;买点更…

MD5 加密

什么是MD5算法 MD5 信息摘要演算法&#xff08;Message-Digest Algorithm&#xff09;&#xff0c;一种被广泛使用的密码杂凑函数&#xff0c;可以产生出一个128位元&#xff08;16位元组&#xff09;的散列值&#xff08;hash value&#xff09;&#xff0c;用于确保信息传输…

MD5算法详解

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

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

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

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

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

md5加密算法

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

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

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

表白代码

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

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

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

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

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

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

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

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

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

简单制作vbs 对话框表白

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

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

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

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

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

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

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

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

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

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

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

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

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

vbs无法拒绝的表白代码

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