在Swing中,密碼欄位具有getPassword()(returns char[])方法,而不是通常的getText()(returns String)方法,同樣,我遇到了不使用String密碼的建議,
為什么String涉及密碼安全性受到威脅?使用起來感覺很不方便char[],
解決方案:
字串是不可變的,這意味著一旦創建了String,如果另一個行程可以轉儲記憶體,則除了反射之外,您將無法清除資料,然后再進行垃圾回收,
使用陣列,您可以在使用完資料后顯式擦除資料,您可以用任何您喜歡的東西覆寫陣列,并且即使在垃圾回收之前,密碼也不會出現在系統中的任何位置,
因此,是的,這是一個安全性問題-但是即使使用,也char[]只會減少攻擊者的機會視窗,并且僅適用于這種特定型別的攻擊,
如評論中所述,垃圾回收器移動的陣列可能會將資料的零散副本保留在記憶體中,我相信這是特定于實作的-垃圾收集器可能會清除所有記憶體,以免發生這種情況,即使是這樣,仍然會有一段時間char[]包含實際角色作為攻擊視窗,
本文首發于java黑洞網,博客園同步更新
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280857.html
標籤:Java
上一篇:Java基礎練習——讀心術(撲克牌魔術——21張撲克牌)--代碼簡化版
下一篇:Java 常用類總結(SE基礎)
