package com.example.testdemo.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
//创建MD5加密方法md5
public static String md5(String text){
MessageDigest digest=null;
try {
digest = MessageDigest.getInstance("md5");
byte[] result = digest.digest(text.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : result) {
int number = b & 0xff;
String hex = Integer.toHexString(number);
if (hex.length() == 1) {
sb.append("0" + hex);
} else {
sb.append(hex);
}
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return "";
}
}
从第十二行开始都是什么意思啊?byte[] result = digest.digest(text.getBytes());
为什么用了两次digest。下面的for语句又是什么意思啊?详解必采纳
这是一个Java类,实现了MD5加密的功能。
具体实现如下:
1、导入Java内置的MessageDigest和NoSuchAlgorithmException库
2、创建一个md5方法,参数为一个字符串text,返回值为加密后的字符串。方法内部做如下操作:
a. 通过getInstance方法获取MessageDigest对象,并传入md5字符串作为参数,表示要进行MD5加密
b. 调用digest方法对text字符串进行加密,得到一个加密后的字节数组result
c. 遍历result数组,对每一个字节进行处理,得到一个十六进制字符串,并拼接到StringBuilder对象sb中
d. 将sb对象转换为字符串并返回,即为加密后的结果
3、如果在获取MessageDigest对象时发生NoSuchAlgorithmException异常,返回空字符串。
总的来说,这个类通过Java内置的MessageDigest类实现了MD5加密,并将加密结果以十六进制字符串的形式返回。
问题:
1、第12行代码(byte[] result = digest.digest(text.getBytes());)的意思是对输入的字符串进行 MD5 加密,并将加密后的结果存储在一个字节数组 result 中。
2、调用 digest() 方法是为了计算哈希值,而 digest(byte[] input) 方法接受一个输入字节数组,并返回一个字节数组表示计算出的哈希值。因此,text.getBytes() 是为了将输入的字符串转换为一个字节数组。
3、在第14-21行的 for 循环中,遍历 result 数组的每个字节,将其转换为 16 进制字符串,并将其拼接到 StringBuilder 对象 sb 中。这是将字节数组转换为 16 进制字符串的一种常见方法。
4、第12行只调用了一次 digest() 方法,将字节数组转换为了 MD5 加密后的结果。如果在第12行之后又再次调用 digest() 方法,则会重新计算哈希值,这是没有必要的。因此,代码中没有重复调用 digest() 方法的情况。
参考:https://blog.csdn.net/hyun134340/article/details/128666965
不知道你这个问题是否已经解决, 如果还没有解决的话: