有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java执行MessageDigest时MessageDigest在做什么。是否多次更新?

我有一个Java方法,我正在移植到C#,它使用salt散列字符串。方法是执行如下操作

private byte[] hash(byte[] bytes, byte[] salt) {
    MessageDigest digester = MessageDigest.getInstance("SHA-256");
    digester.update(salt);
    digester.update(bytes);
    byte[] hashed = digester.digest();
    return hashed;
}

我不明白双重更新函数在做什么。它真的在做什么吗

This question was reposted becauase it was wrongfully marked as duplicate. I found an answer and decided to share.


共 (1) 个答案

  1. # 1 楼答案

    Java中的MessageDigest和c中的HashAlgorithm的区别在于MessageDigest是有状态的,而HashAlgorithm不是。更新时,您正在将提供的字节数组追加到MessageDigest中的字节数组。这将在MessageDigest时重置。摘要被称为

    在c#中,由于HashAlgorith不是有状态的,所以它只对提供的任何内容进行散列。与问题中的哈希函数等效的c#方法如下

    private byte[] Hash(byte[] bytes, byte[] salt)
    {   
        HashAlgorithm sha256 = new SHA256CryptoServiceProvider();
        byte[] combined = salt.Concat(bytes).ToArray();
        byte[] hashed = sha256.ComputeHash(combined);
        return hashed;
    }