我必须通过C#中的代码发送电子邮件,smtp服务器需要身份验证,因此我需要创建一个新的NetworkCredential
实例。
现在的问题是我想使用某种加密方法(如MD5)将密码存储在数据库中,但NetworkCredential
构造函数输入一个清除密码,如何使用NetworkCredential
实例创建MD5加密密码?
抱歉我的英语不好
答案 0 :(得分:1)
存储秘密的最佳方式是根本不存在它。对此进行了广泛的讨论,例如见Best way to store password in database。
如果必须以可检索的方式存储密码,通常的方法是使用对称算法(例如AES)对其进行加密。要使用对称算法,您需要有一个密钥,现在问题就变成了:如何安全地存储私钥?人们为确保钥匙所做的事情:
但所有这些只会提高一个标准,但不会受到确定的攻击者的保护。
我知道一些商业公司提供付费解决方案,以加密方式将密钥分散到程序代码中,因此无法检索它,例如通过附加调试器和拦截调用到哪里关键是明确的。搜索" metaforic"以此类商业解决方案为例。