0
想象一下,你在堆內存中有一個對稱密鑰,你不再需要它,但你想確保它在釋放/垃圾收集之前被擦除。如果你自己擦拭,優化器很可能會跳過這一步,因爲沒有必要。那麼,如何正確地做到這一點?如何保證在Java中垃圾收集之前清除機密數據?
想象一下,你在堆內存中有一個對稱密鑰,你不再需要它,但你想確保它在釋放/垃圾收集之前被擦除。如果你自己擦拭,優化器很可能會跳過這一步,因爲沒有必要。那麼,如何正確地做到這一點?如何保證在Java中垃圾收集之前清除機密數據?
我認爲這篇博文應該讓你開始。這似乎是關於Swing,但我不明白爲什麼你不能普遍應用它。
http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords – 2012-03-27 14:57:27
基本上不可能做到安全,東西有關使用字符數組是基本上是一個紅鯡魚(在清除它之前發生單個GC,突然你在內存中有兩個副本..哎呀)。唯一保證工作方式是使用DirectByteBuffer,但這很麻煩。我曾經使用不安全的方式在GC堆外創建String實例以獲得過去的樂趣,但由於顯而易見的原因,這很脆弱。 – Voo 2012-03-27 20:11:16