C# 如何检查SecureString是否包含某些文本?
我正在尝试查看我的C# 如何检查SecureString是否包含某些文本?,c#,.net,string,securestring,C#,.net,String,Securestring,我正在尝试查看我的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
是否包含特定文本
我可以这样做:
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
是否包含一些文本?检查它而不破坏SecureString
目的的最佳方法是在进程输出缓冲区循环中,在它进入SecureString
安全缓冲区之前。但在最好的情况下,这样做会创建最后N个字符的纯内存字符串(N为“Hello world”长度),这有点不安全。当然,比调用SecureString.ToString()更不安全,因为正如您所说的,它会将所有文本存储在普通内存中,这不符合目的。简短回答:您没有。检查的原因是什么?安全地执行此操作的唯一方法是在循环中调用RemoveAt
,这会消耗字符串,并且启动效率极低。在字符串变得安全之前进行此类检查,而不是之后。请注意,将SecureString
转换为字符串并不完全违背目的(它必须在某个时刻发生),但确保字符串不被复制并在之后安全地删除它并不是一件小事。@CamiloTerevinto我正在读取一个进程的输出,该进程在静默模式下运行console exe。我正在将输出附加到SecureString中。有时,如果出现错误,进程的输出可能会显示解密的密码。这就是控制台exe的工作方式,我无法改变。所以我希望我至少可以确保我从进程中读取的输出不会留在我的应用程序的内存中。你如何将其写入SecureString?它可能已经没用了,这取决于你写的是什么,Spose将把它的内部缓冲区归零。当然,它不能跟踪通过ToString方法获得的字符串。