1

我必须通过 C# 中的代码发送电子邮件,smtp 服务器需要身份验证,所以我需要创建一个新NetworkCredential实例。

现在的问题是我想使用像 MD5 这样的加密方法将密码存储在数据库中,但是NetworkCredential构造函数接受输入一个明确的密码,我如何NetworkCredential使用 MD5 加密密码创建实例?

对不起我的英语不好

4

1 回答 1

2

储存秘密的最好方法是根本不拥有它。对此进行了广泛的讨论,例如参见Best way to store password in database

如果您必须以可检索的方式存储密码,一般方法是使用对称算法(例如 AES)对其进行加密。要使用对称算法,您需要有一个密钥,现在问题变成了:如何安全地存储私钥?人们为保护密钥所做的事情:

  • 使用强复合盐作为您组合制作私钥的部分(应用程序嵌入、注册表、硬件特定熵,如 CPU id 等)
  • 使用设备或芯片来存储密钥,例如 TPM(可信平台模块)
  • 使用 ACL(访问控制列表)禁止访问您存储密钥的文件
  • 使用操作系统提供的安全存储来存储部分盐或密钥
  • 从安全服务器即时请求密钥并尽快处理

但这一切只会提高一个标准,但不会保护来自确定的攻击者。

我知道一些商业公司提供付费解决方案,以加密方式分散程序代码中的密钥,因此无法检索它,例如通过附加调试器并拦截对密钥所在位置的调用在明确。搜索“metaforic”以获取此类商业解决方案的示例。

于 2015-01-26T12:31:35.923 回答