Java 将密码存储在会话持续时间的变量中

Java 将密码存储在会话持续时间的变量中,java,security,encryption,passwords,Java,Security,Encryption,Passwords,我计划在会话期间在内存中存储一个明文密码,并希望得到一些关于这有多不安全的反馈。存储密码的原因是,当应用程序的用户执行某些操作时,密码将在会话期间多次用于加密和解密后台数据。我认为让用户每次输入密码会更安全,但这会导致非常糟糕的用户体验,因此我试图想出一个尽可能安全且不会激怒用户的解决方案。不要直接使用密码加密/解密数据,您应该从密码中派生密钥(请参见PBKDF2)。此用于加密/解密的派生密钥在内存中存储较长时间更安全。谢谢您的评论。如果我错了,请纠正我,但我假设您的建议是这样的:用户提供他们的

我计划在会话期间在内存中存储一个明文密码,并希望得到一些关于这有多不安全的反馈。存储密码的原因是,当应用程序的用户执行某些操作时,密码将在会话期间多次用于加密和解密后台数据。我认为让用户每次输入密码会更安全,但这会导致非常糟糕的用户体验,因此我试图想出一个尽可能安全且不会激怒用户的解决方案。

不要直接使用密码加密/解密数据,您应该从密码中派生密钥(请参见PBKDF2)。此用于加密/解密的派生密钥在内存中存储较长时间更安全。

谢谢您的评论。如果我错了,请纠正我,但我假设您的建议是这样的:用户提供他们的密码,然后从该密码派生一个密钥,该密钥在会话期间存储在内存中,用于加密和解密任何数据。关于这一点,我只有一个问题——如果攻击者获得了派生密钥,他们是否无法解密任何加密数据?谢谢你的帮助!“这个用于加密/解密的派生密钥在内存中存储更长时间更安全。”-你能解释一下为什么这样更安全吗?我不认为是这样。是的,如果他们获得了派生密钥,他们将能够解密/加密数据,但是您的用户将感谢他们的实际密码没有被公开。在内存中存储解密密钥通常是不可避免的,但存储密码则是另一回事。