1 out of 1 rated this helpful - Rate this topic

SecureString.AppendChar Method

Appends a character to the end of the current secure string.

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

public void AppendChar (
	char c
)
public void AppendChar (
	char c
)
public function AppendChar (
	c : char
)
Not applicable.

Parameters

c

A character to append to this secure string.

Exception type Condition

ObjectDisposedException

This secure string has already been disposed.

InvalidOperationException

This secure string is read-only.

ArgumentOutOfRangeException

Performing this operation would make the length of this secure string greater than 65536 characters.

CryptographicException

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

The value of this secure string, if any, is decrypted; c is appended; then the new value of the secure string 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 System;
using System.Security;

class Sample 
{
    public static void Main() 
    {
    string msg1 = "   SecureString = {0}\n   Length = {1}\n";
    string msg2 = "This example demonstrates the effect of the AppendChar, InsertAt,\n" +
                  "RemoveAt, SetAt, and Clear methods on the value of a SecureString\n" +
                  "object. This example simulates the value of the object because the\n" +
                  "actual value is encrypted.\n";
    SecureString ss = new 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("1) The initial value of the SecureString object:");
    Console.WriteLine(msg1, "\"\"", ss.Length);

    Console.WriteLine("2) AppendChar: Append 'a' to the value:");
    ss.AppendChar('a');
    Console.WriteLine(msg1, "\"a\"", ss.Length);

    Console.WriteLine("3) AppendChar: Append 'X' to the value:");
    ss.AppendChar('X');
    Console.WriteLine(msg1, "\"aX\"", ss.Length);

    Console.WriteLine("4) AppendChar: Append 'c' to the value:");
    ss.AppendChar('c');
    Console.WriteLine(msg1, "\"aXc\"", ss.Length);

    Console.WriteLine("5) InsertAt: Insert 'd' at the end of the value (equivalent\n" +
                      "     to AppendChar):");
    ss.InsertAt(ss.Length, 'd');
    Console.WriteLine(msg1, "\"aXcd\"", ss.Length);

    Console.WriteLine("6) RemoveAt: Remove the last character ('d') from the value:");
    ss.RemoveAt(3);
    Console.WriteLine(msg1, "\"aXc\"", ss.Length);

    Console.WriteLine("7) SetAt: Set the second character ('X') of the value to 'b':");
    ss.SetAt(1, 'b');
    Console.WriteLine(msg1, "\"abc\"", ss.Length);

    Console.WriteLine("8) Clear: Delete the value of the SecureString object:");
    ss.Clear();
    Console.WriteLine(msg1, "\"\"", ss.Length);
    }
}
/*
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 System;
using System.Security;

class Sample 
{
    public static void Main() 
    {
    ConsoleKeyInfo cki;
    String m1 = "(This example simulates entering a password. " +
                "Do not enter an actual password.)\n";
    String m2 = "Enter your password (up to 15 letters, numbers, and underscores)\n" +
                "Press BACKSPACE to delete the last character entered. \nPress ESCAPE to quit:";
    SecureString password = new SecureString();
    int top, 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;

// 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.

    while (true)
        {
        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('*');
                }
            }
        }

// Make the password read-only to prevent it from being modified after it has 
// been collected. 

    password.MakeReadOnly();
    }
}
/*
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:
***************

*/

Windows 98, Windows Server 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
SecureString Append character sample using PowerShell
#Securestring.ps1
# This example demonstrates the AppendChar, 
# InsertAt, RemoveAt, SetAt, and Clear methods.
# Using PowerShell.  tfl@psp.co,uk
# Define a support function
  
# Conversion of the C#  Example found at:
http://msdn2.microsoft.com/en-us/library/system.security.securestring.appendchar.aspx
Write-Host @"
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.
"@

#format string
$msg1 = "   SecureString = {0}`n   Length = {1}"
# Create secure string
$ss = New-Object system.security.securestring
# Now mofify this string in steps,showing the effects
Write-Host "1) The initial value of the SecureString object:"
[system.console]::writeline( $msg1, "`"`"", $ss.length); write-host ""
Write-Host "2) AppendChar: Append 'a' to the value:"
$ss.AppendChar("a")
[system.console]::writeline( $msg1, "`"a`"", $ss.length); write-host ""
Write-Host "3) AppendChar: Append 'X' to the value:"
$ss.AppendChar("X")
[system.console]::writeline( $msg1, "`"aX`"", $ss.length); write-host ""
Write-host "4) AppendChar: Append 'c' to the value:"
$ss.AppendChar('c');
[system.console]::writeline( $msg1, "`"aXc`"", $ss.length); write-host ""
Write-Host "5) InsertAt: Insert 'd' at the end of the value (equivalent"
Write-Host "   to AppendChar):"
$ss.InsertAt($ss.Length, 'd');
[system.console]::writeline( $msg1, "`"aXcd`"", $ss.length); write-host ""
Write-Host "6) RemoveAt: Remove the last character ('d') from the value:"
$ss.RemoveAt(3);
[system.console]::writeline( $msg1, "`"aXc`"", $ss.length); write-host ""
  
Write-Host "7) SetAt: Set the second character ('X') of the value to 'b':"
Write-Host "   (PSH starts arrays at 0)"
$ss.SetAt(1, 'b')
[system.console]::writeline( $msg1, "`"abc`"", $ss.length); write-host ""
Write-host "8) Clear: Delete the value of the SecureString object:"
$ss.Clear()
[system.console]::writeline( $msg1, "`"`"", $ss.length); write-host ""

 

 Running this script file produces the following output:

PSH [D:\foo]: D:\foo\securestring.ps1
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':
   (PSH starts arrays at 0)
   SecureString = "abc"
   Length = 3
8) Clear: Delete the value of the SecureString object:
   SecureString = ""
   Length = 0