Ne ignoravo l'esistenza, adesso che mi sono informato, provato e letto, posto per ricordarmi questa classe e segnalarla a chi non la conoscesse.

Eccone una breve descrizione:

The contents of SecureString is protected by DPAPI ( Data Protection API ), which means it's contents is encrypted all the time.  It is also pinned in memory, which means the .NET Framework doesn't move it around.  It is also mutable, which means 1) it can be cleared and 2) passing it around the framework doesn't cause several copies of the sensitive information to be floating around. Sweet idea.

Un esempio di utilizzo:

.
   1:  // CREO LA PASSWORD
   2:  // (nella realtà si legge da pressione tasti, da password textbox,...)
   3:  SecureString password = new SecureString();
   4:  char[] cars = new char[] { 'B', 'a', 'b', 'b', 'a' };
   5:  foreach (char car in cars)
   6:  {
   7:      password.AppendChar(car);
   8:  }
   9:  password.MakeReadOnly();
  10:   
  11:   
  12:   
  13:  // LEGGO LA PASSWORD
  14:  IntPtr ptr = Marshal.SecureStringToBSTR(password);
  15:  // questo rende insicura la password in quanto memorizzata in memoria managed
  16:  string contents = Marshal.PtrToStringAuto(ptr); 
  17:  Marshal.ZeroFreeBSTR(ptr);

 

Segnalo alcuni link e un controllo di tipo TextBox che fa uso proprio della SecureString: