1

有很多关于查看和比较 secureString 对象的帖子。许多人使用 .Net 的 Marshal 方法,甚至其拥护者也承认这种方法令人费解。一种更快的方法是将安全字符串放入 PSCredential 对象并使用 GetNetworkCredential() 方法。下面的例子:

$ssn = Read-Host("Enter your social security number") -AsSecureString
$ssn
"You entered $clearText = $((New-Object PSCredential($ssn,'.')).GetNetworkCredential().Password)"

第二行输出:

System.Security.SecureString

第三行输出:

You entered 123456789 

这是一个不错的小技巧。我可以使用 -AsSecureString 来 (1) 隐藏用户在屏幕上的输入,以及 (2) 将字符串加密保存在内存中。而且我还可以为 String 方法解密 SecureString(检查长度、验证输入、与另一个安全字符串进行比较)。

这仍然安全吗?当然,在调用“GetNetworkCredential()”的那一刻,内存中有一个解密的字符串。方法完成后是否删除了该字符串/指针?还是它会一直留在内存中,直到垃圾收集器将其删除?

4

0 回答 0