建议和反馈

请填写你的反馈内容

问答 > 密码学 > 问答详情
求助中

如果我使用HMACSha1作为散列算法,为什么PasswordDerivedBytes每次都会生成不同的密钥?

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

如果我使用相同的密码,盐,initvector组合,知道它使用HMACSha1,为什么Rfc2898DerivedBytes每次产生相同的密钥?

以下代码摘要 -

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);


羊羊羊

2019-06-12

584

0

撰写答案

请先登陆或注册

1个回答

欧珀欧普

2019-06-12

Rfc2898DerivedBytes使用PBKDF2和HMAC-SHA-1作为PRF(PRF本质上是一个键控散列)。 PBKDF2需要PRF并使用密钥和salt / chaining值作为消息。

PasswordDeriveBytes使用PBKDF1和用户指定的哈希算法。 此哈希应该是未加密的。 但是你传入了键入的“HMACSHA1”。 在创建HMACSHA1实例时,.NET会填充随机密钥。 由于PasswordDeriveBytes不能识别密钥(它需要一个非密钥哈希),因此每次都会以不同的哈希函数结束,因此每次都会产生不同的结果。


0
赞赏(0)

公司名称:北京链客行科技有限公司

联系方式:010-67707199

ICP备案号:京ICP备18032136号

Copyright:链客区块链技术问答社区 版权所有

邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励