我正在将一些 C# 转换为 Java。 C# 是:
// Return a SHA256 hash of a string, formatted in hex
private static string HashPassword(string password)
{
SHA256Managed hash = new SHA256Managed();
byte[] utf8 = UTF8Encoding.UTF8.GetBytes(password);
return BytesToHex(hash.ComputeHash(utf8));
}
在 Java 中,我用 MessageDigest
替换了 SHA256Managed
:
private static String HashPassword(String password)
{
MessageDigest hash = MessageDigest.getInstance("SHA-256");
byte[] utf8 = hash.digest(password.getBytes(StandardCharsets.UTF_8));
return BytesToHex(hash.ComputeHash(utf8)); // ComputeHash?
}
但是 MessageDigest
没有 ComputeHash()
,我也没有看到它的等效项。
MessageDigest
是此处使用的正确类吗?如果是这样,我要为 ComputeHash()
做什么。如果不是,我使用什么类?
请注意,BytesToHex
将字节数组转换为十六进制字符串。
最佳答案
MessageDigest
是有状态的。您将数据递增地传递给它,并在完成后调用 digest()
计算所有数据的哈希。
您调用的 hash.digest(byte[])
方法本质上是 hash.update(byte[])
然后是 hash 的简写。摘要()
。
调用 digest()
还会将 MessageDigest
实例重置为其初始状态。
关于java - Java中字节数组的哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41151407/