我正在接收用户名和密码,我正在创建与Web服务的连接,然后使用该服务使用各种功能。
但是我想将用户名存储为明文和加密密码,以便以后自动诊断,我可以调用catch()
中的方法,该方法将使用相同的用户名和解密密码重新初始化连接。
我在加密和解密方面没有太多经验,但我可以使用建议的here方法,使它们成为private
。
另外,当然,我会删除存储密码甚至是TextBox
文本的临时变量。
但我想知道将加密密码保存在内存中是否安全?
答案 0 :(得分:1)
你应该真正散列密码,而不是加密密码。也就是说,你(并且通过扩展,攻击者)不应该“解密”他们给你的密码,如果它被散列。
在内存中存储哈希密码是合理的。无论如何,它必须在某种程度上存在于记忆中。
答案 1 :(得分:1)
只是为了确保我正确理解你的问题:
如果这些假设是正确的:不要过于担心它,只需将它保存在一个变量中即可 - 最好是在Hans Passant所建议的SecureString中。 SecureString将为您完成工作:
SecureString对象的值会自动加密,可以修改,直到您的应用程序将其标记为只读,并且可以通过您的应用程序或.NET Framework垃圾收集器从计算机内存中删除。
Hashing在服务器端是有意义的,其中密码(或散列)存储在磁盘上/数据库中。在客户端,您无法对密码进行哈希处理,因为您需要对Web服务进行身份验证。
如果您想永久存储密码(即将其写入文件),然后,您需要担心加密/散列。