将加密密码保存在内存中供以后使用安全吗?

时间:2013-12-13 15:46:42

标签: c# security encryption

我正在接收用户名和密码,我正在创建与Web服务的连接,然后使用该服务使用各种功能。

但是我想将用户名存储为明文和加密密码,以便以后自动诊断,我可以调用catch()中的方法,该方法将使用相同的用户名和解密密码重新初始化连接。

我在加密和解密方面没有太多经验,但我可以使用建议的here方法,使它们成为private

另外,当然,我会删除存储密码甚至是TextBox文本的临时变量。

但我想知道将加密密码保存在内存中是否安全?

2 个答案:

答案 0 :(得分:1)

你应该真正散列密码,而不是加密密码。也就是说,你(并且通过扩展,攻击者)不应该“解密”他们给你的密码,如果它被散列。

在内存中存储哈希密码是合理的。无论如何,它必须在某种程度上存在于记忆中。

答案 1 :(得分:1)

只是为了确保我正确理解你的问题:

  1. 您正在编写客户端软件
  2. 用户输入密码
  3. 您可以将密码存储在变量中一段时间​​,以便对Web服务进行身份验证
  4. 您想知道是否可以将密码存储在内存中(即在变量中)更长时间,以便稍后再次对Web服务进行身份验证
  5. 如果这些假设是正确的:不要过于担心它,只需将它保存在一个变量中即可 - 最好是在Hans Passant所建议的SecureString中。 SecureString将为您完成工作:

      

    SecureString对象的值会自动加密,可以修改,直到您的应用程序将其标记为只读,并且可以通过您的应用程序或.NET Framework垃圾收集器从计算机内存中删除。

    Hashing在服务器端是有意义的,其中密码(或散列)存储在磁盘上/数据库中。在客户端,您无法对密码进行哈希处理,因为您需要对Web服务进行身份验证。

    如果您想永久存储密码(即将其写入文件),然后,您需要担心加密/散列。