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

Whi*_*tel 5 .net c# security encryption asp.net-mvc

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

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

在MSDN上,我发现了一篇关于使用"受保护的配置提供程序"保护配置设置的文章,但我不想将该设置存储在我的web.config文件中.

我考虑使用DpapiProtectedConfigurationProvider,它使用一些机器和用户特定属性作为加密密钥,但是此提供程序仅用于XML配置节点.

一篇 MSDN 文章是关于ProtectedData类的,但这种方法真的安全吗?

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

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

问候

Dav*_*ble 1

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

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

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

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