如何在C#中存储加密密钥安全

时间:2014-05-07 15:37:46

标签: c# .net asp.net-mvc security encryption

我有以下问题: 在我的ASP.NET MVC应用程序中,我想在我的数据库中存储一些键/值设置。 其中一些键/值设置包含密码,我想对其进行加密以保护密码。

我无法对密码进行哈希处理,因为我需要一些密码才能在远程SMTP服务器上进行验证。

在MSDN上,我找到了article关于使用“受保护的配置提供程序”保护配置设置,但我不想将这些设置存储在我的web.config文件中。

我考虑过使用DpapiProtectedConfigurationProvider,它使用一些特定于机器和用户的属性作为加密密钥,但是这个提供程序只能用于XML配置节点。

另一个MSDN article是关于ProtectedData类的,但这种方法真的安全吗?

那么,在C#应用程序中存储密码的最佳方法是什么?

我还阅读了以下其他问题,但我找不到解决方案: Question 1Question 2Question 3

问候

1 个答案:

答案 0 :(得分:1)

一种可能性是在数据库中查询加密密钥(保存在单独的表中),并使用它来加密/解密所需的密钥值,您可以使用单独的查询从数据库中以加密形式检索这些密钥值

这意味着,您当然会将加密的密钥值和加密密钥存储在数据库中,并且您将加密密钥存储在应用程序代码中的任何位置。您还应该使用proc调用来检索加密密钥,而不是允许直接访问存储它的表。

此技术假定您正在使用其他一些建立数据库连接的方法,即数据库连接密码本身在应用程序中以不同方式受到保护。

正如@Blam所述,您必须将加密密钥存储在某个地方,无论是在应用程序中,还是在应用程序可访问的文件中,还是存储在数据库中。