对于 C# 控制台应用程序,我需要在应用程序设置中保留密码,但是当我创建类型设置时System.Security.SecureString
,设置本身会从纯文本配置文件中删除。由于我再也看不到原始值,因此无法验证数据在保存时是否仍处于加密状态。
是SecureString
最好的方法还是我应该ProtectedData
用来简单地加密字符串?
--EDIT-- 这是我用来验证 aSecureString
可以持久化的测试代码。
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.Security.SecureString Password
{
get
{
return ((global::System.Security.SecureString)(this["Password"]));
}
set { this["Password"] = value; }
}
static void Main(string[] args)
{
PersistPassword("A-Test-Password");
Console.WriteLine(ReadPassword());
Console.ReadLine();
}
static void PersistPassword(string Password)
{
SecureString ss = new SecureString();
Password.ToCharArray().ToList().ForEach(ss.AppendChar);
Settings.Default.Password = ss;
}
static string ReadPassword()
{
SecureString ss = Settings.Default.Password;
IntPtr ptr = Marshal.SecureStringToCoTaskMemUnicode(ss);
return Marshal.PtrToStringUni(ptr);
}