Certo, spesso non lo si fa…anzi, non lo si fa quasi mai, ma quando si manipolano dati sensibili (come password, numeri di documenti o informazioni del genere) sarebbe bene farlo con l’ausilio della classe “SecureString”.
Questa, infatti, è inserita di default nel namespace “System.Security” del .NET Framework. Il suo modo di agire è abbastanza intuitivo: in pratica, ogni volta che il valore di una variabile di tipo “char” viene inserito in un’istanza di tipo SecureString, esso viene criptato in automatico.
Il modo di utilizzare questa classe, non è però così immediato; vediamo un esempio per inserire una stringa in una variabile criptata:
1: string s = "valore_dato_sensibile";
2: SecureString ss = new SecureString();
3: //inserisce il valore di s in ss un carattere per volta
4: for (int i = 0; i < s.Length; i++)
5: ss.AppendChar(s[i]);
6: //può essere utile rendere il dato criptato in modalità "sola lettura"
7: ss.MakeReadOnly();
Se invece vorremo, in seguito, recuperare i dati inseriti nella variabile di tipo SecureString dovremo fare in questo modo:
1: IntPtr p = Marshal.SecureStringToBSTR(ss);
2: string x = Marshal.PtrToStringBSTR(p);
3: Marshal.ZeroFreeBSTR(p);
Da notare che ci siamo serviti di un puntatore (”p”) e della classe “Marshal” contenuta nel namespace “System.Runtime.InteropServices”. (la variabile “ss”, per comodità, è quella utilizzata nella prima parte di codice)
Il dato che ci interesserà sarà quello contenuto nella stringa “x”, cioè il testo originario.



