問題

在Swing中,密碼欄位有一個getPassword()(返回char[])方法而不是通常的getText()(返回String)方法.類似地,我遇到了一個不使用String來處理密碼的建議.

為什麼String在密碼方面對安全構成威脅? 使用char[]感覺不方便.

  最佳答案

字串是不可變的.這意味著一旦您建立了String,如果另一個程序可以轉儲記憶體,則沒有辦法(除了反射)您可以在垃圾收集之前擺脫資料.

使用陣列,您可以在完成資料後顯式擦除資料.您可以用您喜歡的任何東西覆蓋陣列,即使在垃圾收集之前,該密碼也不會存在於系統的任何地方.

所以是的,這是一個安全問題 – 但即使使使用char[]也只會減少攻擊者的機會視窗,它只適用於這種特定型別的攻擊.

如評論中所述,垃圾收集器移動的陣列可能會將資料的雜散副本留在記憶體中.我相信這是特定於實現的 – 垃圾收集器可能會清除所有記憶體,以避免這種事情.即使它這樣做,仍然有時間char[]包含實際字元作為攻擊視窗.

  相同標籤的其他問題

javastringsecuritypasswordschar