【发布时间】:2010-12-29 20:20:02
【问题描述】:
我有一个类,它从我的应用程序的登录窗口存储用户用户数据(用户 ID 和密码)。目前我正在使用 SecureString 来存储密码,但在某些地方我需要原始密码来验证。 (此时必须是纯文本)
有没有人知道一种将它存储在内存中的安全方法,如果需要,它可以很容易地重新转换为纯文本?
【问题讨论】:
-
有什么威胁?攻击向量是什么?
我有一个类,它从我的应用程序的登录窗口存储用户用户数据(用户 ID 和密码)。目前我正在使用 SecureString 来存储密码,但在某些地方我需要原始密码来验证。 (此时必须是纯文本)
有没有人知道一种将它存储在内存中的安全方法,如果需要,它可以很容易地重新转换为纯文本?
【问题讨论】:
看起来 SecureString 本身并不安全,并且有一些工具可以获取安全字符串。您可以编写自己的代码,加密字符串,分成几部分并存储它,但同样没有安全性,如果您需要使用密码(例如数据库登录等),黑客可以找到并破解您的代码。 安全性不是一个重点,所以代码混淆等很多事情都是齐头并进的。 SmartAssembly 之类的工具可以通过自动加密来保护字符串。 另一种想法是存储散列,而不是密码本身,散列基本上是使用一些随机参数创建的,因此它不能被重新创建,一次密码。
【讨论】:
考虑 CryptProtectData():
http://www.pinvoke.net/default.aspx/crypt32.cryptprotectdata
它可以使用当前用户密钥或本地机器密钥。在 Web 设置(即 ASP.NET)中,您想使用本地计算机。只要您有一个进行加密/解密的 Web 服务器。
【讨论】:
您可以通过 MD5 加密密码,比较您可以加密输入的数据并复制两个字符串
【讨论】: