所谓MD5,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,关键之处在于——这种"压缩"是不可逆的。
为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:
大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的"数字指纹",如果任何人对文件做了任何改动,其MD5值也就是对应的"数字指纹"都会发生变化。
我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。
笔者上面提到的例子只是MD5的一个基本应用,实际上MD5还被用于加密解密技术上,如Unix、各类BSD系统登录密码(在MD5诞生前采用的是DES加密算法,后因MD5安全性更高,DES被淘汰)、通信信息加密(如大家熟悉的即时通信软件MyIM)、数字签名等诸多方面。
MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的, 用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。
public String makeMD5(String password) {
MessageDigest md;
try {
// 生成一个MD5加密计算摘要
md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(password.getBytes());
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
String pwd = new BigInteger(1, md.digest()).toString(16);
System.err.println(pwd);
return pwd;
} catch (Exception e) {
e.printStackTrace();
}
return password;
}
分享到:
相关推荐
本主题聚焦于使用MD5(Message-Digest Algorithm 5)算法对用户密码进行加密。MD5是一种广泛使用的哈希函数,它将任意长度的数据转化为固定长度的128位(16字节)摘要,通常以32个十六进制数字表示。 MD5的主要特点...
下面我们将详细介绍如何使用Java语言实现对文件进行MD5加密的过程。 #### MD5加密原理 MD5算法通过一系列复杂的数学运算,将输入的信息转换为一个固定的128位输出值。该输出值通常被表示为一个32位的十六进制数,...
在Spring Boot中,我们可以使用`DigestUtils.md5DigestAsHex()`方法来对字符串进行MD5加密。这个方法接受一个字节数组作为参数,返回一个32位的小写十六进制字符串,代表了原始字符串的MD5哈希值。以下是一个简单的...
java实现md5 加密解密(在网络中MD5是著名的不可逆算法,但是如果知道MD5的加密的字符串 则可以通过自己的加密算法对明文进行加密,对加密后的密文与字符串匹配; 匹配成功,表示找到明文;但是此程序的时间耗费较高!仅...
MD5是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常用32个十六进制数字表示。它不是一种可逆的加密方法,也就是说,一旦数据经过MD5加密,原始数据无法通过散列值还原。这使得MD5常用于存储...
5. **MD5与密码安全**:在处理用户密码时,直接使用MD5加密存在风险,因为彩虹表可以快速破解MD5散列。现代做法是结合加盐(salt)和多次迭代的哈希算法(如bcrypt或scrypt),增加破解难度。 6. **替代方案**:...
开发者可以将其导入项目中,通过调用相关API实现对字符串、文件等进行MD5加密。通常,它会包含以下几个关键组件: - `MessageDigest` 类:这是Java标准库中的类,用于生成各种消息摘要,包括MD5。 - `MD5Util` 类:...
前端通常会使用MD5对用户输入的密码进行单向加密,这样即使数据被截获,也无法还原原始密码。JavaScript中,可以使用MD5库如`crypto-js`来计算MD5哈希值。 5. **Java与JavaScript之间的兼容**:在Java后台与...
在Java编程语言中,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,主要目的是为了产生一个固定长度的、不可逆的数字摘要,常用于存储密码。MD5算法将任意长度的输入(也叫做预映射,pre-image)通过...
首先,MD5是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常用32个十六进制数字表示。MD5的主要特点是快速和简单,但因为其碰撞概率较高,即不同的输入可能会得到相同的散列值,所以现在主要...
在提供的压缩包文件“MD5”中,可能包含了一个Java程序示例,演示了如何使用MD5加密并生成32位小写的哈希值。这个程序可以作为一个基础模板,帮助开发者快速集成MD5功能到自己的项目中。 总之,MD5是一种便捷的哈希...
java实现MD5加密解密算法,java源代码~
java MD5密码加密.
在实际应用中,为了提高安全性,通常会将MD5值与随机盐值结合,再进行加密,这样即使两个用户使用相同的密码,加密后的结果也会不同,增加了破解的难度。 `secr`可能是提供了一个加密后的密文或者是一个包含加密...
总结,Java实现MD5加密算法主要是通过`java.security.MessageDigest`类,经过`getInstance("MD5")`获取MD5实例,然后使用`digest()`和`update()`方法处理数据,最终将二进制摘要转换为十六进制字符串。尽管MD5的安全...
用于MD5加密处理,便于安全,方便,防止数据库信息泄露,将密码加密后存储。该文件来源于网络资源。
在`encrypt`这个文件夹中,可能包含了一些关于Java MD5加密的示例代码或者测试用例,你可以进一步研究其中的内容,加深对MD5加密的理解和应用。通过实际操作和分析这些代码,你将能够更好地掌握如何在实际项目中实现...
这个压缩包可能包含了一个主程序,用于演示如何使用MD5进行加密操作。主程序通常会包含读取输入字符串,初始化`MessageDigest`对象,调用`digest()`方法计算哈希,然后将结果转换成16进制字符串展示给用户。 4. **...
Java 中可以使用 MessageDigest 类来实现 MD5 加密。 MD5Utils 是一个工具类,提供了 MD5Encode 方法来实现 MD5 加密。该方法将输入的字符串转换为 byte 数组,然后使用 MessageDigest 类的 getInstance 方法获取 ...
### 在Java中使用MD5进行密码加密 #### 知识点概述 在现代软件开发过程中,安全性至关重要。尤其是在处理敏感信息如用户密码时,确保数据的安全性和隐私性尤为重要。MD5(Message-Digest Algorithm 5)是一种广泛...