目前,我正在开发 .NET应用程序,需要加密存储在 SQL Server 2008 数据库中的数据。
我使用AES加密,密钥是使用密码和盐组合生成的,使用 SHA1 PasswordDeriveBytes 进行哈希处理。现在,我需要将哈希算法更改为 SHA256 ,据我所知 PasswordDeriveBytes 仅接受MD5和SHA1作为哈希参数。我只是想知道我是否可以使用PasswordDeriveBytes来实现SHA256。
如果没有,为什么.NET中的替代内置类出于同样的目的?我可以手动实现吗?如果手动实施是唯一的解决方案,我可能需要帮助。提前谢谢。
答案 0 :(得分:0)
另一种选择是Rfc2898DeriveBytes
。它使用起来更安全,特别是如果您需要超过20个字节的输出。它当然与PasswordDeriveBytes不兼容。对于超过20个字节的任何值,PasswordDeriveBytes都会被破坏。不幸的是,PBKDF2也有一个缺点:它重复了散列大小上任何值的所有迭代。在这种情况下,您可能希望将其与KBKDF配对。
因此,如果不恢复到其他库,您似乎无法做到这一点。这就是Bouncy Castle可能会来的地方。它具有PBKDF2功能,您可以使用HMAC进行初始化,而HMAC又可以使用给定的哈希算法进行初始化。请参阅this stackoverflow问题中PBKDF2的使用。您可以使用Sha256Digest
替换摘要,然后就可以了。
注意:加密中没有什么是简单的,似乎你需要有弹性来源来实现这一点。