我有以下问题: 在我的ASP.NET MVC应用程序中,我想在我的数据库中存储一些键/值设置。 其中一些键/值设置包含密码,我想对其进行加密以保护密码。
我无法对密码进行哈希处理,因为我需要一些密码才能在远程SMTP服务器上进行验证。
在MSDN上,我找到了article关于使用“受保护的配置提供程序”保护配置设置,但我不想将这些设置存储在我的web.config文件中。
我考虑过使用DpapiProtectedConfigurationProvider,它使用一些特定于机器和用户的属性作为加密密钥,但是这个提供程序只能用于XML配置节点。
另一个MSDN article是关于ProtectedData类的,但这种方法真的安全吗?
那么,在C#应用程序中存储密码的最佳方法是什么?
我还阅读了以下其他问题,但我找不到解决方案: Question 1,Question 2,Question 3
问候
答案 0 :(得分:1)
一种可能性是在数据库中查询加密密钥(保存在单独的表中),并使用它来加密/解密所需的密钥值,您可以使用单独的查询从数据库中以加密形式检索这些密钥值
这意味着,您当然会将加密的密钥值和加密密钥存储在数据库中,并且您不将加密密钥存储在应用程序代码中的任何位置。您还应该使用proc调用来检索加密密钥,而不是允许直接访问存储它的表。
此技术假定您正在使用其他一些建立数据库连接的方法,即数据库连接密码本身在应用程序中以不同方式受到保护。
正如@Blam所述,您必须将加密密钥存储在某个地方,无论是在应用程序中,还是在应用程序可访问的文件中,还是存储在数据库中。