.NET:PasswordDeriveBytes和Rfc2898DeriveBytes的区别Security.CryptographyPasswordDeriveBytes。在.NET文档中,它说PasswordDeriveBytes使用“PBKDF1算法的扩展”,后来在文档中指定为“PKCS#5v2.0标准”,即PBKDF2(据我所知)。我在网络上随处可见(包括StackExchange上的此处),但每个人都说“使用Rfc2898DeriveBytes,导致cipher*被弃用并使用PBKDF1”。但msdn.microsoft.com上文档的唯一区别似乎是Rfc*版本特别提到了PBKDF2,其中Password*表示“PBKDF1的扩展”和“PKCS#5v2.0”。那么,谁能告诉我这两个类之间的区别(如果有的话),以及为什么我应该使用一个而不是另一个来派生PBKDF2密码密钥?现在,处理相同数据的其他代码明确使用PBKDF2,并且有效,所以这表明PasswordDeriveBytes确实也使用PBKDF2,或者PBKDF2在某些情况下仅与PBKDF1兼容,但我想确切地知道这是否不是一些随机事物的副作用,并且事物只是神奇地起作用(并且最终可能神奇地和令人惊讶地打破)而没有人真正理解为什么。我认为可以在这里找到一个很好的答案:C#PasswordDeriveBytesobfuscation但总结一下:Microsoft对原始PKCS#5(又名PBKDF1)的实现包括不安全的扩展,以提供比散列函数可以提供的多字节更高的安全性(请参阅此处和此处的错误报告).即使它没有错误,您也应该避免使用未经证实的专有标准扩展(或者您将来可能永远无法解密您的数据-至少不能在Windows之外。)我强烈建议您使用更新的Rfc2898DeriveBytes,它自.NET2.0从PBKDF2(PKCS#5v2)开始可用。如果您实例化PasswordDeriveBytes并调用GetBytes方法,传递一个小于基础摘要算法输出大小的值,那么您将从PBKDF1算法中获得一个值。如果对同一个对象进行两次GetBytes调用,您可能会在实现中遇到计数错误。PBKDF1只描述为输出最大哈希算法的大小(例如SHA-1为20字节),但PasswordDeriveBytes类已经制定了支持1000倍哈希输出大小的公式。因此,在这个类中产生的大值可能不容易在另一个平台中实现。如果您实例化Rfc2898DeriveBytes,您将获得PBKDF2算法的流式实现。PBKDF2和PBKDF1之间最明显的区别是PBKDF2允许生成任意数量的数据(限于(2^32-1)*hashOutputSize;或SHA-1为85,899,345,900字节)。PBKDF2还使用更复杂的结构(特别是HMAC而不是直接摘要)来使输出密码更难从输出值中恢复。实现中的“流”是GetBytes(5)的串联,GetBytes(3)与GetBytes(8)相同。与PasswordDeriveBytes不同,这在Rfc2898DeriveBytes中运行良好。PBKDF1最初是为生成DES密钥而创建的,于1993年在PKCS#5v1.5中发布。PBKDF2于1999年在PKCS#5v2.0(重新发布为RFC2898)中发布。幻灯片应位于ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-5v2/pkcs5v2-0.pdf(但是好像有问题所以ftp://ftp.dfn-cert.de/pub/pca/docs/PKCS/ftp.rsa.com/99workshop/pkcs5_v2.0.ppt可能会做)进一步总结差异。(幻灯片由PBKDF1和PBKDF2的创建者RSASecurity编写,他们推荐PBKDF2而不是PBKDF1)。这是一篇详细介绍差异的博客文章:http://blogs.msdn.com/b/shawnfa/archive/2004/04/14/generating-a-key-from-a-password.aspxPBKDF2可用于生成密钥任意长度,这非常适合基于密码的加密(它可以生成对称密码所需的任何密钥长度),但不太适合安全密码存储。它还使用HMAC应用盐,而不是像PBKDF1这样的连接,后者使用弱盐具有更好的安全性。PKCS#5v2.0定义了PBKDF1和PBKDF2,前者是出于向后兼容的考虑,建议您在新应用中使用PBKDF2。我不知道为什么后者比前者好,但这两个.NET类似乎确实使用了不同但可互操作的算法。(可能是因为只交换了生成的密钥,没有交换输入+KDF。)以上就是C#学习教程的全部内容:.NET:PasswordDeriveBytes和Rfc2898DeriveBytes的区别,如果对大家有用还需要了解更多更多关于C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
