1

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。なんで?

EDIT:念のため、これを試してみたところ、期待どおり「True」が出力されました。

private void Button_Click(object sender, RoutedEventArgs e)
{
    SecureString s = new SecureString();
    s.MakeReadOnly();
    Console.WriteLine(s.IsReadOnly());
}
4

1 に答える 1

1

pBox.SecurePasswordプロパティを読み取るたびに、セキュア文字列の新しいインスタンスを返します。複数回呼び出すことで検証できますGetHashCodepBox.SecurePassword

また、Visual Studioを使用すると、「オブジェクトIDを作成」は#Xを表示しません。これは、マウスにカーソルを合わせるたびに新しいインスタンスになるためです。

オブジェクトへの参照をSecureStringローカル変数に作成する場合、それ呼び出したのと同じインスタンスであるMakeReadOnly()ため、期待どおりに動作します。

于 2012-11-20T21:02:06.143 に答える