如何安全地使用SecureString?

24

我看到的所有示例最终都会将SecureString转换回标准字符串,从而失去了安全性。有没有一种好的方法可以在不出现这个问题的情况下使用SecureString?

我知道我可以将SecureString调用marshal函数转换为BSTR,但我该如何处理这个BSTR呢?我能逐个字符获取它们吗?如果可以,怎么做?

2个回答

4
此链接包含大量有用的信息,包括如何获取未管理的内存块来传递字符串给本地代码(这也是安全的),一个使用它的BCL类和几个示例链接: http://bartdesmet.net/blogs/bart/archive/2006/03/31/3851.aspx 主要的问题是它目前并没有被广泛使用,但你可以自由制作依赖于它的库。

0

我认为MSDN页面对SecureString的描述最为精准:

表示应保密的文本。

SecureStrings并不像字符串一样使用。它们是用来限制访问敏感信息的安全容器。

如果您想修改SecureString的内容,所有必要的方法都在那里。

然而,如果您需要获取安全字符串的值,则必须使用ToString()方法,因为没有其他公开的方法可以执行此操作。

换句话说,不要像字符串一样使用SecureStrings。


13
ToString方法只会返回字符串对象的类型名称,而不会返回字符串内容。你可以将SecureString转换为BSTR格式,但我不知道从那时起如何使用它。保密并不意味着您不需要处理它。信用卡号码是保密的,但我仍然想要钱! - Andre Walertio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接