Export (0) Print
Expand All

SecureString::RemoveAt Method

Removes the character at the specified index position from this secure string.

Namespace:  System.Security
Assembly:  mscorlib (in mscorlib.dll)

[HandleProcessCorruptedStateExceptionsAttribute]
public:
void RemoveAt(
	int index
)

Parameters

index
Type: System::Int32

The index position of a character in this secure string.

ExceptionCondition
ObjectDisposedException

This secure string has already been disposed.

InvalidOperationException

This secure string is read-only.

ArgumentOutOfRangeException

index is less than zero, or greater than or equal to the length of this secure string.

CryptographicException

An error occurred while encrypting or decrypting the value of this secure string.

The index is zero-based and the first character in this instance is at index position zero.

The value of this secure string, if any, is decrypted; the character at the specified index position is removed; then the new value is encrypted.

The following code example demonstrates how the AppendChar, InsertAt, RemoveAt, SetAt, and Clear methods affect the value of a SecureString object.

// This example demonstrates the AppendChar, 
// InsertAt, RemoveAt, SetAt, and Clear methods. 

using namespace System;
using namespace System::Security;

int main()
{
    String^ msg1 = L"   SecureString = {0}\n   Length = {1}\n";
    String^ msg2 = L"This example demonstrates the effect of the AppendChar, InsertAt,\n"
    L"RemoveAt, SetAt, and Clear methods on the value of a SecureString\n"
    L"object. This example simulates the value of the object because the\n"
    L"actual value is encrypted.\n";
    SecureString ^ ss = gcnew SecureString;

    // This sample modifies the contents of a SecureString, ss, in 
    // several steps. After each step, the length and simulated value of ss 
    // are displayed. The actual value of ss is encrypted.
    Console::WriteLine( msg2 );
    Console::WriteLine( L"1) The initial value of the SecureString object:" );
    Console::WriteLine( msg1, L"\"\"", ss->Length );
    Console::WriteLine( L"2) AppendChar: Append 'a' to the value:" );

    ss->AppendChar( 'a' );
    Console::WriteLine( msg1, L"\"a\"", ss->Length );
    Console::WriteLine( L"3) AppendChar: Append 'X' to the value:" );

    ss->AppendChar( 'X' );
    Console::WriteLine( msg1, L"\"aX\"", ss->Length );
    Console::WriteLine( L"4) AppendChar: Append 'c' to the value:" );

    ss->AppendChar( 'c' );
    Console::WriteLine( msg1, L"\"aXc\"", ss->Length );
    Console::WriteLine( L"5) InsertAt: Insert 'd' at the end of the value (equivalent\n"
                        L"     to AppendChar):" );

    ss->InsertAt( ss->Length, 'd' );
    Console::WriteLine( msg1, L"\"aXcd\"", ss->Length );
    Console::WriteLine( L"6) RemoveAt: Remove the last character ('d') from the value:" );

    ss->RemoveAt( 3 );
    Console::WriteLine( msg1, L"\"aXc\"", ss->Length );
    Console::WriteLine( L"7) SetAt: Set the second character ('X') of the value to 'b':" );

    ss->SetAt( 1, 'b' );
    Console::WriteLine( msg1, L"\"abc\"", ss->Length );
    Console::WriteLine( L"8) Clear: Delete the value of the SecureString object:" );

    ss->Clear();
    Console::WriteLine( msg1, L"\"\"", ss->Length );

    return 0;
}

/*
This code example produces the following results:

This example demonstrates the effect of the AppendChar, InsertAt,
RemoveAt, SetAt, and Clear methods on the value of a SecureString
object. This example simulates the value of the object because the
actual value is encrypted.

1) The initial value of the SecureString object:
   SecureString = ""
   Length = 0

2) AppendChar: Append 'a' to the value:
   SecureString = "a"
   Length = 1

3) AppendChar: Append 'X' to the value:
   SecureString = "aX"
   Length = 2

4) AppendChar: Append 'c' to the value:
   SecureString = "aXc"
   Length = 3

5) InsertAt: Insert 'd' at the end of the value (equivalent
     to AppendChar):
   SecureString = "aXcd"
   Length = 4

6) RemoveAt: Remove the last character ('d') from the value:
   SecureString = "aXc"
   Length = 3

7) SetAt: Set the second character ('X') of the value to 'b':
   SecureString = "abc"
   Length = 3

8) Clear: Delete the value of the SecureString object:
   SecureString = ""
   Length = 0
*/

The following code example demonstrates how the AppendChar and RemoveAt methods can be used to collect the characters in a password.

// This example demonstrates using the AppendChar and RemoveAt 
// methods to collect a password. 
using namespace System;
using namespace System::Security;
int main()
{
   bool go = true;
   ConsoleKeyInfo cki;
   String^ m1 = L"(This example simulates entering a password. "
   L"Do not enter an actual password.)\n";
   String^ m2 = L"Enter your password (up to 15 letters, numbers, and underscores)\n"
   L"Press BACKSPACE to delete the last character entered. \nPress ESCAPE to quit:";
   SecureString ^ password = gcnew SecureString;
   int top;
   int left;

   // 
   // The Console.TreatControlCAsInput property prevents this example from 
   // ending if you press CTL+C, however all other operating system keys and 
   // shortcuts, such as ALT+TAB or the Windows Logo key, are still in effect. 
   // Each input character is assumed to occupy one screen column. 
   //
   Console::TreatControlCAsInput = true;
   Console::Clear();
   Console::WriteLine( m1 );
   Console::WriteLine( m2 );
   top = Console::CursorTop;
   left = Console::CursorLeft;
   while ( go )
   {
      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( '*' );
         }
      }
   }

   return 0;
}

/*
This example produces results similar to the following text:

(This example simulates entering a password. Do not enter an actual password.)

Enter your password (up to 15 letters, numbers, and underscores)
Press BACKSPACE to delete the last character entered.
Press ESCAPE to quit:
***************

*/

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft