2011-05-16 78 views
1

我的Java應用程序操縱最終用於加密文件的密碼。 因爲我看到它在擺動JPasswordField我加載它在結構操作密碼

public char[] password; 

我想這會增加一定程度的保護以防止密碼的內存掃描。 我認爲這只是一個「隱晦」的水平,不是真正的保護。 在我看來,這是有用的,因爲它對許多微不足道的掃描儀是有效的。 事情是這樣嗎?或者我錯過了什麼?

+2

你害怕什麼? – SLaks 2011-05-16 16:29:18

+0

JPasswordField不提供任何形式的內存掃描保護。 – 2011-05-16 16:32:23

+0

所以使用char []相當於使用String? – AgostinoX 2011-05-16 16:40:13

回答

3

之所以使用char[]代替String被一些人首選的是,char[]可以使用後縮小窗口時出現在覈心轉儲密碼或通過failur清除暴露從綁定的緩衝區檢查讀取。

但是,它不適合用於JPasswordField多種原因工作這麼好:

  • GC可移動的對象,而不必立即消隱原件。
  • JPasswordField通常與ActionListener一起使用,它將接收密碼作爲ActionEvent中的命令字符串。
  • Document實現可能會複製。
  • 在提取char[]後,人們忘記將空白JPasswordField空白。
  • 有可能是更重要的安全事情,你可能會花費在努力(如機場檢查員留意瓶裝水,讓炸彈通過)。

在專業方面,你會得到一個打勾清單功能,不必解釋自己,因爲你在做最佳實踐。

1

你的意思是說你認爲char []比一個String更安全嗎?嗯,不。在內部,一個字符串將其文本保存在char []中。他們看起來完全一樣。

我想你可以加密內存中的密碼以防止這種事情發生。但是大概你必須在加密之前以純文本的形式閱讀它,所以它在一段時間內仍然會以純文本形式存在。我猜想,如果你期望無論你的操作花了很長時間,在內部加密密碼可能會有一些價值,以減少暴露。

2

正如其他人所說,char[]提供比String沒有真正的安全優勢。然而,char[]不超過String對象提供這些好處:

  • 這是很難無意中透露密碼(數組的toString()方法不透露其內容)
  • 內容可以被清除時,他們不再需要