我在 C# 中有以下代码
PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, HashAlgorithm, PasswordIterations);
byte[] KeyBytes = DerivedPassword.GetBytes(32);
我正在使用“SHA1”散列算法。
根据SHA1定义,它生成160位(20字节)的 key 。我的问题是 GetBytes 方法如何从 DerivedPassword 获取 32 个字节,GetBytes 方法背后使用什么算法?
最佳答案
Microsoft 对原始 PKCS#5(又名 PBKDF1)的实现包括不安全扩展以提供比散列函数可以提供的字节更多的字节(参见错误报告 here 和 here)。
即使它没有错误,您也应该避免对标准进行未记录的专有扩展(否则您将来可能永远无法解密您的数据 - 至少不能在 Windows 之外。)
我强烈建议您使用较新的 Rfc2898DeriveBytes
,它实现了自 .NET 2.0 以来可用的 PBKDF2 (PKCS#5 v2)。
关于C# PasswordDeriveBytes 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9231754/