Java中為什麼使用char[]而不是String存儲密碼?

String是不可改變的對象,也就是說一旦你創建了String對象,那麼在垃圾回收之前你是沒有辦法手動銷毀這個String對象的,如果有個程序能dump內存,恰好這時垃圾回收未執行(垃圾回收執行是不確定的),dump下來的內存可以清晰讀取String,這樣就有了暴露密碼的風險。

char[]數組呢,你可以在使用完后直接清除數據,而且你也可以隨意更改數組內的內容,而且密碼不會在系統中任何地方出現,即使是在垃圾回收之前。

那麼理解這個問題就很簡單了,這就是個安全策略問題,使用String你很可能會不小心列印到日誌或者其他不安全的地方,而使用char[]則不會有這樣的問題,免於二次攻擊。

Advertisements

你可能會喜歡