MD5只是用于加密吗?可听过文件MD5?
百度百科
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。
1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
从上面的介绍来说 MD5 人家只是个算法,只是多用于加密,但是人家还有个用处就是用于来校验文件是否完整。为什么这么说呢?同一个文件(比如说一个文件你 copy 一份换了一个名字,并没有修改) MD5 过后何获取文件 MD5 校验值结果是一样的。这就是问什么你下载的时候都会跟一个 MD5 的值,他是让你交验一下文件是否完整。
其还有个作用,比如说用户连续上传文件,一般人的做法就是:我给这个文件生成 UUID 名称,然后把 UUID 存在数据库中,但是如果用户连续不停的上传同一个文件,打个比方,你的网站有 10w 人访问,他们有 10% 的人把同一个文件上传了两份,一份文件是 1MB 这就多占了你 10000MB 空间。但是如果你设计一下用户上传的时候你先计算一下他的 MD5 的值然后去文件库里查找,如果存在则只要把之前的路径引用存放到你现在的库里就可以了,速度提升了,而且空间也省了很多。
说了这么多,我们来实际用用吧,怎么获取文件的 MD5 值。
引入maven
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.5</version>
</dependency>
hutool 不用我说了吧
测试代码
public static void main(String[] args) {
MD5 md5 = MD5.create();
String s = md5.digestHex(new File("text.md"));
System.out.println(s);
}
是不是很简单。学到了吧。