C#PasswordDeriveBytes混淆我在C#中有如下代码PasswordDeriveBytesDerivedPassword=newPasswordDeriveBytes(Password,SaltValueBytes,HashAlgorithm,PasswordIterations);byte[]KeyBytes=DerivedPassword(Get.;我正在使用“SHA1”散列算法。根据SHA1定义,它生成一个160位(20字节)的密钥。我的问题是GetBytes方法如何获得32来自DerivedPassword的字节,GetBytes方法背后使用的是什么算法?微软对原始PKCS#5(又名PBKDF1)的实现包括不安全的扩展,以提供比散列函数可以提供的字节更多的字节(参见此处和此处的错误报告)。即使它是无错误,您应该避免未经证实的专有标准扩展(或者您将来可能永远无法解密您的数据-至少不能在Windows之外。)我强烈建议您使用更新的Rfc2898DeriveBytes,它自.NET2.0以来实现自PBKDF2(PKCS#5v2)起可用。GetBytes方法背后使用什么算法?它使用算法PBKDF1,稍微修改以允许任意密钥长度。替换类,Rfc2898DeriveBytes使用PBKDF2。您可以阅读关于PBKDF2的维基百科文章以获得使它起作用的基本概念的一般概念。密钥派生函数使用称为密钥拉伸的功能。(不要在维基百科上查找它,因为当前文章将此概念与KeyEnhance混淆,后者是完全不同的。)密钥拉伸通常通过在CTR模式下应用PRF(例如哈希函数或密码)来完成,或者通过迭代它通过连接中间输出来做到这一点。例如,如果使用CTR过程,将SHA-1作为PRF,并且想要32字节的伪随机输出,则将SHA1(keymaterial,0)与SHA1(keymaterial,1)的前12个字节连接起来。以上就是C#学习教程:C#PasswordDeriveBytes迷惑分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
