Как работать с SecureString? - C#
Формулировка задачи:
Скажите в чем смысл этого класса? Строку в него преобразовать еще можно, но вот обратно вообще никак не выходит... Ну т.е. я видел в интернете всякие способы через Marshal, но неужели это так задумано? Может быть (как я понял) ее даже и не надо переводить в обычную строку, но как ее тогда хотя бы в БД добавить? И как потом сравнить 2 таких строки? Кажется перегруженного сравнения там тоже нет... Что толку с нее?
Решение задачи: «Как работать с SecureString?»
textual
Листинг программы
// System.Windows.Controls.PasswordBox
/// <summary>Возвращает или задает пароль, содержащийся в <see cref="T:System.Windows.Controls.PasswordBox" />.</summary>
/// <returns>Строковое представление пароля, содержащегося в данный момент в элементе <see cref="T:System.Windows.Controls.PasswordBox" />.Значением по умолчанию является <see cref="F:System.String.Empty" />.</returns>
[DefaultValue(""), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public unsafe string Password
{
[SecurityCritical]
get
{
string result;
using (SecureString securePassword = this.SecurePassword)
{
IntPtr intPtr = Marshal.SecureStringToBSTR(securePassword);
try
{
result = new string((char*)((void*)intPtr));
}
finally
{
Marshal.ZeroFreeBSTR(intPtr);
}
}
return result;
}
[SecurityCritical]
set
{
if (value == null)
{
value = string.Empty;
}
using (SecureString secureString = new SecureString())
{
for (int i = 0; i < value.Length; i++)
{
secureString.AppendChar(value[i]);
}
this.SetSecurePassword(secureString);
}
}
}