在PasswordDeriveBytes中使用SHA256

时间:2013-02-22 06:35:32

标签: encryption aes sha1 sha256

目前,我正在开发 .NET应用程序,需要加密存储在 SQL Server 2008 数据库中的数据。

我使用AES加密,密钥是使用密码和盐组合生成的,使用 SHA1 PasswordDeriveBytes 进行哈希处理。现在,我需要将哈希算法更改为 SHA256 ,据我所知 PasswordDeriveBytes 仅接受MD5和SHA1作为哈希参数。我只是想知道我是否可以使用PasswordDeriveBytes来实现SHA256。

如果没有,为什么.NET中的替代内置类出于同样的目的?我可以手动实现吗?如果手动实施是唯一的解决方案,我可能需要帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

另一种选择是Rfc2898DeriveBytes。它使用起来更安全,特别是如果您需要超过20个字节的输出。它当然与PasswordDeriveBytes不兼容。对于超过20个字节的任何值,PasswordDeriveBytes都会被破坏。不幸的是,PBKDF2也有一个缺点:它重复了散列大小上任何值的所有迭代。在这种情况下,您可能希望将其与KBKDF配对。

因此,如果不恢复到其他库,您似乎无法做到这一点。这就是Bouncy Castle可能会来的地方。它具有PBKDF2功能,您可以使用HMAC进行初始化,而HMAC又可以使用给定的哈希算法进行初始化。请参阅this stackoverflow问题中PBKDF2的使用。您可以使用Sha256Digest替换摘要,然后就可以了。

注意:加密中没有什么是简单的,似乎你需要有弹性来源来实现这一点。