【发布时间】:2018-06-17 09:29:15
【问题描述】:
我正在尝试查看我的SecureString 是否包含特定文本。
我可以这样做:
var sstr = new SecureString();
...
//sstr is now appended with a set of characters
if(sstr.ToString().Contains("Hello world")) {
//do something
}
这行得通,但是当我做sstr.ToString()的那一刻,似乎我只是将SecureString中的内容写入内存,这完全违背了使用SecureString的目的。
我应该如何检查SecureString 是否包含一些文本?
【问题讨论】:
-
简短回答:你不知道。检查的原因是什么?
-
唯一安全的方法是在循环中调用
RemoveAt,这会消耗字符串,并且启动效率极低。在字符串变得安全之前进行此类检查,而不是之后。请注意,将SecureString转换为字符串不会完全 破坏目的(它必须在某个时候发生),但确保字符串不被复制并在之后安全地擦除它并非易事。 -
@CamiloTerevinto 好吧,我正在读取以静默模式运行控制台 exe 的进程的输出。我将输出附加到 SecureString 中。有时,如果出现错误,该过程的输出可能会显示解密的密码。这就是控制台 exe 的工作方式,我无法更改。所以我希望我至少可以确保我从 Process 读取的输出不会留在我的应用程序的内存中。
-
您是如何将其写入 SecureString 的?根据你的写作方式,它可能已经没用了
-
Dispose 会将其内部缓冲区清零。当然它不能跟踪你用 ToString 方法得到的字符串。
标签: c# .net string securestring