什么是MD5加密算法?
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
MD5加密算法的功能和常见用途:
-
功能:
将任意长度的信息经过处理后,能够转换为128位的信息。(唯一性,不会产生重复,可以理解为信息的唯一身份ID) -
常见用途:
- 密码管理: 系统在对用户注册的密码进行MD5加密后再做持久化操作,这样即使是拥有最高权限能够查看数据库信息的管理员也无法破解用户的密码信息(不知道大家有没有听过一句骇人听闻的话:“只要知道你的三个常用的密码,那你基本就没啥秘密可言了“。这真不是吓唬人的,尤其是在现在电子信息时代,大家都倾向于设置几个常用的弱口令密码)
- 文件校验: 软件开发商开发一个商业软件往往是需要耗费巨大的人力物力的,而大家都喜欢白嫖(😪 暗示大家可以关注一下这个菜鸡博主)去网上找破解版,但是破解版往往意味着有木马植入,隐藏风险,还是建议大家支持正版哈。这时候开发商通过对正版软件做一个MD5的加密,将加密后的code公布在官方网站上面,用户通过别的渠道下载后,通过对比下载后的文件的MD5code和官方的code就能知道软件有没有被植入后门等风险。
- 数字签名: 通过一些认证机构,对A的作品或者某种意义上的产出进行MD5算法加密,并将输出的code备案,做好记录,通过这种手段能够防止别人伪造。如果古代的文人墨客知道这种技术,那么现在就不会出现那么多的高仿来以假乱真了。(当然这里只是举个例子,可能并不贴切,大家理解意思就好。)
- 。。。等等,应用领域非常的广泛,期待大家去发现;
MD5的安全性问题:
MD5本身是一种加密算法,而且是非对称的,意味着别人即使拿到了你加密后的code,那么也不可能根据这串code反推出你的原始数据。但是一般用户接触MD5最多的就是个人用户密码。为什么有时候能听到新闻说:某某网站的服务器被攻击了,多少用户的隐私泄露了。。。有的不法分子通过得到的数据库数据,对密码字段进行一些暴力破解或者撞库的方式就可以破解掉你的别的网站的一些密码。
这就是为什么有的网站为啥要让用户强制使用强口令密码,大小写结合的原因,所以当你遇到这里网站的时候你不是嫌它麻烦,而是想到这个网站是一个有安全意识的网站,这是对广大用户的负责。
使用Java类库怎么实现字符串的MD5加密
在 JDK 内部为开发者提供了一个Java 安全性相关的类库放在 java.security
包下 ;
现在我们先看一些 JDK 官方是怎么描述实现 MD5 加密的 api MessageDigest
的:
public abstract class MessageDigest extends MessageDigestSpi
该MessageDigest
类为应用程序提供消息摘要算法的功能,如SHA-1或SHA-256。 消息摘要是采用任意大小的数据并输出固定长度散列值的安全单向散列函数。
MessageDigest
对象开始初始化。 数据通过它使用update方法进行处理。 在任何时候可以调用reset来重置摘要。 一旦要更新的所有数据都被更新,则应调用其中一个digest方法来完成哈希计算。
对于给定数量的更新,可以调用digest方法一次。 在digest之后,将MessageDigest对象重置为初始化状态。
Java平台的每个实现都需要支持以下标准的MessageDigest算法:
- MD5
- SHA-1
- SHA-256
下面是一个小Demo实现,我已经将注释都清晰的标注在上面了:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
public class Md5Coding {
public static void main(String[] args) {
System.out