gpt4 book ai didi

c# - 如果我使用 HMACSha1 作为哈希算法,为什么 PasswordDeriveBytes 每次都会生成不同的 key ?

转载 作者:行者123 更新时间:2023-12-01 18:12:10 24 4
gpt4 key购买 nike

我使用相同的密码和盐,但每次使用PasswordDerivedBytes 运行时它都会生成不同的 key 。但是,如果我使用 Sha1,它每次都会生成相同的 key 。这是为什么?

如果我使用相同的密码、盐、初始化向量组合,并且知道它使用 HMACSha1,为什么 Rfc2898DerivedBytes 每次都会生成相同的 key ?

下面添加了代码片段-

string passPhrase = "passPhrase";
byte[] saltBytes = Encoding.ASCII.GetBytes("saltValue");
int iterations = 2;
int keySize = 32;
string hashAlgo = "HMACSHA1";

Rfc2898DeriveBytes derivedBytes = new Rfc2898DeriveBytes(passPhrase, saltBytes, iterations);
byte[] keyBytes = derivedBytes.GetBytes(keySize);

PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, saltBytes, hashAlgo, iterations);
byte[] keyBytes2 = password.GetBytes(keySize);

最佳答案

Rfc2898DerivedBytes 使用 PBKDF2 和 HMAC-SHA-1 作为 PRF(PRF 本质上是一个 key 哈希)。 PBKDF2 需要 PRF 并使用密码 key 和盐/链接值作为消息。

PasswordDeriveBytes 使用 PBKDF1 和用户指定的哈希算法。该哈希值预计不会被加密。但是您传入了带 key 的“HMACSHA1”。创建 HMACSHA1 实例时,.NET 会填写随 secret 钥。由于 PasswordDeriveBytes 无法识别 key (它需要一个无 key 的哈希),因此每次都会得到不同的哈希函数,从而每次都会产生不同的结果。

关于c# - 如果我使用 HMACSha1 作为哈希算法,为什么 PasswordDeriveBytes 每次都会生成不同的 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27358175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com