C#PasswordDeriveBytes混乱

Sid*_*qui 7 c# cryptography pbkdf2

我在C#中有以下代码

PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, HashAlgorithm, PasswordIterations);
byte[] KeyBytes = DerivedPassword.GetBytes(32);
Run Code Online (Sandbox Code Playgroud)

我正在使用"SHA1"哈希算法.

根据SHA1定义,它生成160位(20字节)密钥.我的问题是GetBytes方法如何从DerivedPassword中获取32个字节,GetBytes方法后面使用了什么算法?

pou*_*pou 11

微软对原始PKCS#5(又名PBKDF1)的实现包括不安全的扩展,以提供比散列函数所能提供的更多字节(参见此处此处的错误报告).

即使它没有错误,你也应该避免对标准进行无证的专有扩展(或者你将来可能永远无法解密你的数据 - 至少不在Windows之外.)

强烈建议您使用更新的Rfc2898DeriveBytes实现PBKDF2(PKCS#5 v2),这是自.NET 2.0以来可用的.


vcs*_*nes 5

GetBytes方法背后使用什么算法?

它使用算法PBKDF1,稍作修改以允许任意密钥长度.替换类,Rfc2898DeriveBytes使用PBKDF2.

您可以阅读关于PBKDF2维基百科文章,以了解基础概念使其发挥作用的一般概念.