是否可以将PasswordBox.SecurePassword
标记为ReadOnly
?
考虑这个简单的代码:
XAML:
<StackPanel>
<PasswordBox Name="pBox" MinWidth="100" />
<Button Content="OK" Click="Button_Click" Width="50" />
</StackPanel>
C#:
private void Button_Click(object sender, RoutedEventArgs e)
{
pBox.SecurePassword.MakeReadOnly();
Console.WriteLine(pBox.SecurePassword.IsReadOnly());
}
它将输出False
。为什么呢?
编辑:为了确保,我尝试了这个并按预期输出“True”。
private void Button_Click(object sender, RoutedEventArgs e)
{
SecureString s = new SecureString();
s.MakeReadOnly();
Console.WriteLine(s.IsReadOnly());
}
答案 0 :(得分:1)
pBox.SecurePassword
都会返回一个新的安全字符串实例。您可以多次在GetHashCode
上致电pBox.SecurePassword
来验证它。
您还会注意到使用Visual Studios“Make object id”不会显示#X,因为每次使用鼠标悬停时都会显示一个新实例。
在将SecureString
对象创建引用到局部变量时, 与您调用MakeReadOnly()
的实例相同,因此它的行为符合预期。