为什么SecureString没有重载的构造函数?
问题描述:
考虑以下几点:为什么SecureString没有重载的构造函数?
_securePassword = New SecureString()
For Each character As Char In password
_securePassword.AppendChar(character)
Next
出人意料的是,the documentation似乎暗示这是“最佳实践”的方式来填充SecureString
与实际信息:
当创建从一个字符串的字符在-a时...
我的问题
为什么不包括New SecureString(password)
?
这对于我来说似乎是纯粹的锅炉代码。
答
的docs告诉你为什么:
一个SecureString的对象不应该从一个字符串构造,因为敏感数据已经受到不变String类的内存持久的后果。构建SecureString对象的最佳方法是从一个字符一次性非托管源,例如Console.ReadKey方法。
所以基本上,你不应该在内存中的字符串,因为这是不安全的。您无法保证字符串已从易受攻击的内存中移除。
答
因为那么您尝试保护的字符串已经作为正常的String
存在于内存中,否定将它作为整个项目保存在SecureString
之内的任何好处。
我认为这个想法是,你不应该在任何给定的时间在一个字符串变量的整个密码。所以在你的示例代码中,首先不应该有**密码**字符串。 – Sal
想想你在问什么。这个班级的存在是为了避免这样做。整个想法并不是将整个字符串作为一个整体呈现在记忆中。 – JuanR