我使用 BigIntegers 存盤我的公鑰和私鑰以進行 RSA 加密。最近我發現字串存盤密碼是不安全的,因為它們是不可變的。BigIntegers 是否具有相同的 volnurability?
目前我正在重構我的代碼,因此當從應用程式的一個部分發送到另一個部分時,用戶密鑰存盤在 char 陣列而不是字串中。我需要知道從這些 char 陣列創建 BigInteger 物件對用戶資料是否安全,或者我是否還需要更改我的應用程式功能的那部分。
uj5u.com熱心網友回復:
出于可能會優先byte[]于.BigIntegerchar[]String
作為背景,您應該閱讀Jon Skeet 的回答,解釋為什么有些人建議使用char[]而不是String存盤密碼。簡短的版本是陣列,是可變的,可以在使用后被覆寫。理論上,這會立即從記憶體中洗掉敏感資料。同時,字串僅由垃圾收集器從記憶體中洗掉,可能不會立即運行。這意味著該值會在記憶體中存在一段時間,這可能是也可能不是問題。
像 a 一樣String, aBigInteger是一個包含一個陣列的物件,它可以防止你改變它。這意味著您不能自己清除陣列,而必須等待垃圾收集器釋放它。
如果您認為這是一個問題,那么將您的密鑰存盤在位元組陣列中并在使用后用零(或任何其他資料)顯式覆寫陣列是有意義的。至于它是否真的很重要,我按照鏈接問題中的現有答案和評論。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/526237.html
