使用MD5加密密码创建NetworkCredential实例

时间:2015-01-26 12:01:38

标签: c# asp.net networkcredentials

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

现在的问题是我想使用某种加密方法(如MD5)将密码存储在数据库中,但NetworkCredential构造函数输入一个清除密码,如何使用NetworkCredential实例创建MD5加密密码?

抱歉我的英语不好

1 个答案:

答案 0 :(得分:1)

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

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

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

但所有这些只会提高一个标准,但不会受到确定的攻击者的保护。

我知道一些商业公司提供付费解决方案,以加密方式将密钥分散到程序代码中,因此无法检索它,例如通过附加调试器和拦截调用到哪里关键是明确的。搜索" metaforic"以此类商业解决方案为例。