2017-07-24 47 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之内的任何好处。

相关问题