操纵密码

时间:2011-05-16 16:26:41

标签: java security password-protection

我的Java应用程序操纵最终用于加密文件的密码。 我将它加载到结构中

public char[] password; 

因为我在摇摆JPasswordField中看到了它。

我认为这为密码的内存扫描增加了一定程度的保护。 我认为这只是一个“默默无闻”的水平,而不是真正的保护。 在我看来,这是有用的,因为它对许多琐碎的扫描仪有效。 做的事情是这样的,还是我错过了什么?

3 个答案:

答案 0 :(得分:3)

有些人首选使用char[]代替String的原因是,当密码出现在核心转储中或通过密码暴露时,可以在使用缩小窗口后清除char[]绑定检查失败从缓冲区读取。

但是,由于多种原因,它对JPasswordField的效果不佳:

  • GC可以移动对象,而不必立即消隐原始副本。
  • JPasswordField通常与ActionListener一起使用,后者在ActionEvent中接收密码作为命令字符串。
  • Document实施可以制作副本。
  • 提取JPasswordField后,人们忘记将char[]空白。
  • 你可能会花费更多重要的安全事项(比如机场安检人员要留意瓶装水并让炸弹通过)。

在专业方面,您会获得一个勾选清单功能,而不必自己解释,因为您正在进行最佳实践。

答案 1 :(得分:2)

正如其他人所说,char[]String相比没有真正的安全优势。但是,char[]确实比String个对象提供了这些好处:

  • 更难以意外泄露密码(数组的toString()方法不会泄露其内容)
  • 不再需要时可以清除内容

答案 2 :(得分:1)

你的意思是你认为char []比扫描内存的人更安全吗?嗯,不。在内部,String将其文本保存在char []中。它们看起来完全一样。

我想你可以加密内存中的密码以防止这种情况发生。但是大概你必须在加密之前以纯文本的形式阅读它,所以在一段时间内它仍然会以纯文本形式存在。我想如果你期望你的操作花费很多时间,那么在内部加密密码以减少曝光可能会有一些价值。