Java Web开发之MD5加密用法分析
什么是MD5加密
MD5全称为“Message-Digest Algorithm 5”,是一种非常常见并且安全性较高的哈希算法。MD5算法的核心在于将任意长度的数据(消息)通过一个不可逆的算法变换成一个固定长度的、十六进制表示的字符串,称为消息摘要。这个摘要具有防篡改性、密钥敏感性和抗碰撞等特性。
MD5加密的应用场景
MD5加密常用于用户密码、文件校验等需要保护数据完整性和安全性的场景。特别的,MD5加密经常用于对用户明文密码进行加密,然后将密码的密文存储在数据库中,以避免密码泄漏而导致安全性被破坏。
MD5加密的实现方式
在JavaWeb开发中,我们通常使用Java语言自身提供的MessageDigest类来实现MD5加密功能。下面我们通过两个示例,介绍如何使用Java进行MD5加密。
示例1:对字符串进行MD5加密
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
public static String string2MD5(String string) {
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
byte[] result = messageDigest.digest(string.getBytes());
StringBuilder stringBuilder = new StringBuilder();
for (byte b : result) {
stringBuilder.append(Integer.toHexString(b & 0xff));
}
return stringBuilder.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}
上述代码中的string2MD5方法,将一个字符串转换为其MD5密文。使用方法如下:
String passwordPlainText = "123456";
String passwordCipherText = MD5Utils.string2MD5(passwordPlainText);
System.out.println(passwordCipherText);
// e10adc3949ba59abbe56e057f20f883e
运行上述代码,会发现输出的结果“e10adc3949ba59abbe56e057f20f883e”即为“123456”的MD5密文。
示例2:对文件进行MD5校验
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
public static String file2MD5(File file) {
MessageDigest messageDigest = null;
FileInputStream fileInputStream = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[1024 * 8];
int length = -1;
while ((length = fileInputStream.read(buffer)) != -1) {
messageDigest.update(buffer, 0, length);
}
byte[] result = messageDigest.digest();
StringBuilder stringBuilder = new StringBuilder();
for (byte b : result) {
stringBuilder.append(Integer.toHexString(b & 0xff));
}
return stringBuilder.toString();
} catch (IOException | NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
} finally {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
上述代码中的file2MD5方法,将一个文件转换为其MD5值。使用方法如下:
File file = new File("C:\\test.txt");
String fileMD5 = MD5Utils.file2MD5(file);
System.out.println(fileMD5);
// 5d41402abc4b2a76b9719d911017c592
运行上述代码,会发现输出的结果“5d41402abc4b2a76b9719d911017c592”即为test.txt文件的MD5值。其中,“5d41402abc4b2a76b9719d911017c592”是通过利用Windows系统的命令“certUtil -hashfile 测试.txt MD5”生成的值,用于校验代码的正确性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Web开发之MD5加密用法分析 - Python技术站