【发布时间】:2013-12-13 15:46:41
【问题描述】:
我正在接收用户名和密码,我正在使用它们创建与 Web 服务的连接,然后使用该服务使用各种功能。
但是,我想将用户名存储为纯文本和加密密码,以便以后进行自动诊断,我可以在 catch() 中调用一个方法,该方法将使用相同的用户名和解密密码重新初始化连接。
我在加密和解密方面没有太多经验,但我可以使用here建议的方法制作它们private。
当然,我还会清除存储密码的临时变量,甚至是 TextBox 文本。
但我想知道将加密密码保存在内存中是否安全?
【问题讨论】:
-
不是,垃圾收集器将副本保存在内存中,这些副本是遥不可及的。而且您不能“删除”字符串,它们是不可变的。 SecureString 类的原因。
-
改用单向哈希 - SHA1/SHA256。
-
我担心你缺乏背景(甚至比我更多)来正确地做到这一点。一些注意事项:
private对阻止黑客没有任何作用(尤其是如果他们可以随意检查内存),即使它可以隐藏加密例程,这也将通过默默无闻来保证安全,“删除临时变量”可能不起作用你希望它做什么(假设你的意思是string s = plaintext; ...; s = null;),如果你也保持密钥可用,你只会最小限度地阻止攻击者。如果有什么误解请告诉我。 -
@delnan 好吧,你没有错过任何解释,但是解决方案是什么?
-
@Mahesha999 回复
TextBox,更好的选择取决于很多内部细节。可能有一个小部件可以提供这样的保证(对于字符串,有SecureString),我不是很精通Windows UI 编程。
标签: c# security encryption