md5加密是不可逆转的,加密可被撞库强破解,所以加密的时候,尤其用MD5加密登录密码的时候加一个随机盐,可用数字加字符串的形式拼接在密码后面进行加密,邓丽的时候一样用密码加随机盐拼接加密,判断是否相等
package com.example.demo.md5;
import com.example.demo.utils.RandomStringUtils;
import com.example.demo.utils.ReadFileUtils;
import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Random;
public class Md5Test {
public static void main(String[] args) throws Exception {
String password = "123456789";
String filePath = "C:/Users/xzw/Desktop/工作文档/12月/15号/15号3.txt";
// System.out.println(getMD5(password));
// System.out.println(getMD5(password).length());
File file = new File(filePath);
// System.out.println(getMD5(file));
System.out.println(getMD5(file).length());
}
public static String getMD5(String str){
// 获取随机盐
String randomString = getRandomString(12);
String MD5 = "";
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] bytes = (str+randomString).getBytes(StandardCharsets.UTF_8);
byte[] digest = md5.digest(bytes);
for (int i = 0; i < digest.length; i++) {
int j = digest[i];
j = j & 0x000000ff;
String s1 = Integer.toHexString(j);
if (s1.length() == 1){
s1 = "0"+s1;
}
MD5 += s1;
}
} catch (Exception e) {
e.printStackTrace();
}
return MD5;
}
//重载,所以用户传入"字符串"或者"文件"都可以解决.
public static String getMD5(File filePathFrom) throws Exception {
String MD5 = "";
String filePathTo ="C:/Users/xzw/Desktop/文档/12月/15号/15号2.txt";
MessageDigest md5 = MessageDigest.getInstance("MD5");
FileInputStream fis = new FileInputStream(filePathFrom);
byte[] bytes = new byte[1024 * 5];
int len = -1;
while ((len=fis.read(bytes))!=-1) {
//一部分一部分更新
md5.update(bytes, 0, len);
System.out.println(new String(bytes,0,len));
}
byte[] digest = md5.digest();
for (int i = 0; i 


