java - Java中字节数组的哈希

标签 java c# hash

我正在将一些 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/

相关文章:

java - 图形因未知原因消失

c# - 搜索带有 xml 命名空间前缀 C# 的 XML 元素

java - LWJGL 无法正确渲染纹理?

Java 大页面和详细 GC header

Java 将计算列添加到 CSV 文件

c# - .Net Gridview 在鼠标悬停后恢复交替颜色

c# - WPF - 具有可扩展控制切碎元素的面板

hash - Clojure映射限制和一致性

hash - HMAC 执行失败

javascript - Webpack-使用具有哈希值的自动版本的缓存清除