MessageDigest 是 Java 中的一个类,用于实现加密算法,例如 SHA-256、SHA-512、MD5 等。它可以将任意长度的数据转换为固定长度的哈希值,通常用于密码验证、数字签名等场景。
MessageDigest 类提供了以下常用方法:
- getInstance(String algorithm): 根据指定的算法名称获取 MessageDigest 实例。
用途:用于获取特定算法的 MessageDigest 实例。
- update(byte[] input): 更新 MessageDigest 对象的输入数据。
用途:用于将字节数组输入添加到当前的 MessageDigest 对象中。
- update(byte input): 更新 MessageDigest 对象的输入数据。
用途:用于将单个字节输入添加到当前的 MessageDigest 对象中。
- digest(): 计算哈希值并返回结果。
用途:用于计算当前 MessageDigest 对象的哈希值,并返回结果。
- digest(byte[] input): 计算给定输入数据的哈希值。
用途:用于计算指定字节数组的哈希值,并返回结果。
- reset(): 重置 MessageDigest 对象,以便重新使用。
用途:用于重置当前 MessageDigest 对象,以便重新使用。
- getAlgorithm(): 获取当前 MessageDigest 对象使用的哈希算法名称。
用途:用于获取当前 MessageDigest 对象使用的哈希算法的名称。
这些方法可以根据具体需求在使用 MessageDigest 类时进行调用。
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
Log.e(TAG, messageDigest.getAlgorithm() );
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
运行上述代码,输出结果为: SHA-1
下面是一个使用 MessageDigest 计算 SHA-256 哈希值的示例代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class HashExample {
public static void main(String[] args) throws NoSuchAlgorithmException {
String input = "hello world";
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(input.getBytes());
System.out.println(bytesToHex(hash));
}
//bytesToHex 方法用于将字节数组转换为十六进制字符串。
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
}
运行上述代码,输出结果为
185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969