SHA256哈希函数给出意想不到的结果

时间:2012-10-25 03:39:46

标签: c# encryption hash sha256

我正在使用C#,并想知道为什么.Net函数PasswordDeriveBytes会返回与其他SHA256算法不同的结果。

我称之为:

byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
var hash = PasswordDeriveBytes("1234567890", saltValueBytes, "SHA256", 1);
byte[] SHA256Pass = hash.GetBytes();

我期待得到哈希值c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646

但我得到了 b化合物:a-N-Z $?] ?? 9,M ^ ???? @ N?

我不知道问题是什么。这个函数是如何工作的以及为什么我得到的结果看起来不像SHA 256哈希。

感谢

2 个答案:

答案 0 :(得分:4)

你是如何显示字节的?看起来你拿了它们并尝试将它们直接转换为字符串,这会给你一些看起来很奇怪的字符(大约是预期字符数的一半)。有关转换为十六进制字符串的一些选项,请参阅this answer,就像您期望的那样。

答案 1 :(得分:2)

PasswordDeriveBytes不是哈希函数,它是密钥派生函数。它精确地跟随PBKDF1,直到超过20个字节的输出,为此设计了PBKDF1。当发生这种情况时,它会变成专有的,程序设计错误,不安全且未知的键​​拉伸功能。

PBKDF1使用SHA-1来实现密钥派生。 SHA-256是一个更安全的哈希函数,具有更大的输出。所以你永远不会为这两个函数提供相同的输出。如果你愿意的话,你将会破坏其中的一个 - 或者更可能是你犯了错误。

请注意,您应该在PBKDF1上使用PBKDF2,因为它更安全并且可以提供按键拉伸。