SecureString.MakeReadOnly Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Hace que el valor de texto de esta cadena segura sea de solo lectura.
public:
void MakeReadOnly();
public void MakeReadOnly ();
member this.MakeReadOnly : unit -> unit
Public Sub MakeReadOnly ()
Excepciones
Esta cadena segura ya se ha desechado.
Ejemplos
En el ejemplo siguiente se muestra cómo se pueden usar los AppendChar métodos y RemoveAt para recopilar los caracteres de una contraseña. Una vez recopilada la contraseña, se convierte en de solo lectura.
using namespace System;
using namespace System::Security;
void main()
{
bool go = true;
ConsoleKeyInfo cki;
String^ m = L"\nEnter your password (up to 15 letters, numbers, and underscores)\n"
L"Press BACKSPACE to delete the last character entered. " +
L"\nPress Enter when done, or ESCAPE to quit:";
SecureString ^ password = gcnew SecureString;
int top;
int left;
// The Console.TreatControlCAsInput property prevents CTRL+C from
// ending this example.
Console::TreatControlCAsInput = true;
Console::Clear();
Console::WriteLine(m);
top = Console::CursorTop;
left = Console::CursorLeft;
do {
cki = Console::ReadKey(true);
if (cki.Key == ConsoleKey::Escape)
break;
if (cki.Key == ConsoleKey::Backspace){
if (password->Length > 0) {
Console::SetCursorPosition(left + password->Length - 1, top);
Console::Write(' ');
Console::SetCursorPosition(left + password->Length - 1, top);
password->RemoveAt(password->Length - 1);
}
}
else {
if ((password->Length < 15) &&
(Char::IsLetterOrDigit( cki.KeyChar ) ||
cki.KeyChar == '_') ) {
password->AppendChar( cki.KeyChar );
Console::SetCursorPosition( left + password->Length - 1, top );
Console::Write("*");
}
}
} while (cki.Key != ConsoleKey::Enter & password->Length < 15);
// Make the password read-only to prevent modification.
password->MakeReadOnly();
// Dispose of the SecureString instance.
delete password;
}
// The example displays output like the following:
// Enter your password (up to 15 letters, numbers, and underscores)
// Press BACKSPACE to delete the last character entered.
// Press Enter when done, or ESCAPE to quit:
// ************
using System;
using System.Security;
class Example
{
public static void Main()
{
ConsoleKeyInfo cki;
String m = "\nEnter your password (up to 15 letters, numbers, and underscores)\n" +
"Press BACKSPACE to delete the last character entered. " +
"\nPress Enter when done, or ESCAPE to quit:";
SecureString password = new SecureString();
int top, left;
// The Console.TreatControlCAsInput property prevents CTRL+C from
// ending this example.
Console.TreatControlCAsInput = true;
Console.Clear();
Console.WriteLine(m);
top = Console.CursorTop;
left = Console.CursorLeft;
// Read user input from the console. Store up to 15 letter, digit, or underscore
// characters in a SecureString object, or delete a character if the user enters
// a backspace. Display an asterisk (*) on the console to represent each character
// that is stored.
do {
cki = Console.ReadKey(true);
if (cki.Key == ConsoleKey.Escape) break;
if (cki.Key == ConsoleKey.Backspace) {
if (password.Length > 0) {
Console.SetCursorPosition(left + password.Length - 1, top);
Console.Write(' ');
Console.SetCursorPosition(left + password.Length - 1, top);
password.RemoveAt(password.Length-1);
}
}
else {
if ((password.Length < 15) &&
(Char.IsLetterOrDigit(cki.KeyChar) || cki.KeyChar == '_')) {
password.AppendChar(cki.KeyChar);
Console.SetCursorPosition(left+password.Length-1, top);
Console.Write('*');
}
}
} while (cki.Key != ConsoleKey.Enter & password.Length < 15);
// Make the password read-only to prevent modification.
password.MakeReadOnly();
// Dispose of the SecureString instance.
password.Dispose();
}
}
// This example displays output like the following:
// Enter your password (up to 15 letters, numbers, and underscores)
// Press BACKSPACE to delete the last character entered.
// Press Enter when done, or ESCAPE to quit:
// ************
Imports System.Security
Class Example
Public Shared Sub Main()
Dim cki As ConsoleKeyInfo
Dim m As String = vbCrLf & "Enter your password (up to 15 letters, numbers, and underscores)" &
vbCrLf & "Press BACKSPACE to delete the last character entered. " & vbCrLf &
"Press Enter when done, or ESCAPE to quit: "
Dim password As New SecureString()
Dim top, left As Integer
' The Console.TreatControlCAsInput property prevents CTRL+C from
' ending this example.
Console.TreatControlCAsInput = True
Console.Clear()
Console.WriteLine(m)
top = Console.CursorTop
left = Console.CursorLeft
' Read user input from the console. Store up to 15 letter, digit, or underscore
' characters in a SecureString object, or delete a character if the user enters
' a backspace. Display an asterisk (*) on the console to represent each character
' that is stored.
Do
cki = Console.ReadKey(True)
If cki.Key = ConsoleKey.Escape Then Exit Do
If cki.Key = ConsoleKey.Backspace Then
If password.Length > 0 Then
Console.SetCursorPosition(left + password.Length - 1, top)
Console.Write(" "c)
Console.SetCursorPosition(left + password.Length - 1, top)
password.RemoveAt(password.Length - 1)
End If
Else
If password.Length < 15 AndAlso([Char].IsLetterOrDigit(cki.KeyChar) _
OrElse cki.KeyChar = "_"c) Then
password.AppendChar(cki.KeyChar)
Console.SetCursorPosition(left + password.Length - 1, top)
Console.Write("*"c)
End If
End If
Loop While cki.Key <> ConsoleKey.Enter And password.Length < 15
' Make the password read-only to prevent modification.
password.MakeReadOnly()
' Dispose of the SecureString instance.
password.Dispose()
End Sub
End Class
' The example displays output like the following:
' Enter your password (up to 15 letters, numbers, and underscores)
' Press BACKSPACE to delete the last character entered.
' Press Enter when done, or ESCAPE to quit:
' ************
Comentarios
Inicialice el valor de texto de una instancia de la SecureString clase con los SecureString constructores y modifique el valor con los Clearmétodos , RemoveAt, SetAt, InsertAty AppendChar .
Después de realizar las modificaciones finales, use el MakeReadOnly método para que el valor de la instancia sea inmutable (solo lectura). Después de marcar el valor como de solo lectura, cualquier intento adicional de modificarlo produce una InvalidOperationExceptionexcepción .
El efecto de invocar MakeReadOnly es permanente porque la SecureString clase no proporciona ningún medio para volver a modificar la cadena segura. Use el IsReadOnly método para probar si una instancia de es de SecureString solo lectura.