using System.Runtime.InteropServices;
public static void Main()
SecureString secure = new SecureString();
Extensions.AppendString(secure, "Hello world");
IntPtr pSecureString = Marshal.SecureStringToGlobalAllocUnicode(secure);
Console.WriteLine("Address of SecureString: 0x{0:X16}", pSecureString.ToInt64());
string strSecureString = Marshal.PtrToStringUni(pSecureString);
Console.WriteLine("Value of SecureString : {0}", strSecureString);
Marshal.ZeroFreeGlobalAllocUnicode(pSecureString);
public static class Extensions {
public static void Append(this SecureString s, string str) {
foreach ( char ch in str )
public static void AppendString(SecureString s, string str) {