我有一个要移植到C#的Java方法,该方法使用盐对字符串进行哈希处理。该方法的作用类似于以下内容。
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;
}
我不明白的是双重更新功能正在做什么。它实际上在做什么吗?
此问题被重新发布,因为它被错误地标记为重复。我找到了答案,决定分享。
最佳答案
Java中的MessageDigest与c#中的HashAlgorithm之间的区别在于,MessageDigest是有状态的,而HashAlgorithm不是。调用MessageDigest.update时,您要将提供的字节数组附加到MessageDigest中的字节数组。调用MessageDigest.digest时,将重置此设置。
在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;
}
关于java - 当您多次执行MessageDigest.update时,MessageDigest会做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37321409/