如何检查 SecureString 是否包含特定文本?

How to check if SecureString contains certain text?

我正在尝试查看我的 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中的内容写入内存,这完全违背了使用[=11的目的=].

我应该如何检查 SecureString 是否包含一些文本?

在不破坏 SecureString 目的的情况下检查它的最佳方法是在进程输出缓冲区循环中,在它进入 SecureString 安全缓冲区之前。但在最好的情况下,这样做会创建一个包含最后 N 个字符("Hello world" 长度为 N)的普通内存字符串,这会有点不安全。当然比调用 SecureString.ToString() 更不安全,因为正如您已经说过的那样,它会将所有文本存储在普通内存中,从而破坏了目的。