2017-07-24 46 views
0

考慮以下幾點:爲什麼SecureString沒有重載的構造函數?

_securePassword = New SecureString() 
For Each character As Char In password 
    _securePassword.AppendChar(character) 
Next 

出人意料的是,the documentation似乎暗示這是「最佳實踐」的方式來填充SecureString與實際信息:

當創建從一個字符串的字符在-a時...

我的問題

爲什麼不包括New SecureString(password)

這對於我來說似乎是純粹的鍋爐代碼。

+1

我認爲這個想法是,你不應該在任何給定的時間在一個字符串變量的整個密碼。所以在你的示例代碼中,首先不應該有**密碼**字符串。 – Sal

+1

想想你在問什麼。這個班級的存在是爲了避免這樣做。整個想法並不是將整個字符串作爲一個整體呈現在記憶中。 – JuanR

回答

5

docs告訴你爲什麼:

一個SecureString的對象不應該從一個字符串構造,因爲敏感數據已經受到不變String類的內存持久的後果。構建SecureString對象的最佳方法是從一個字符一次性非託管源,例如Console.ReadKey方法。

所以基本上,你不應該在內存中的字符串,因爲這是不安全的。您無法保證字符串已從易受攻擊的內存中移除。

1

因爲那麼您嘗試保護的字符串已經作爲正常的String存在於內存中,否定將它作爲整個項目保存在SecureString之內的任何好處。

相關問題