特定の場所から保存およびロードされる小さなxml構成ファイルを作成しています(したがって、を使用していませんuser.config
)。私のアプリケーションは.NET2.0であり、新しいバージョンに移動できません(したがって、ありませんDataContractSerializer
)。ユーザーがアプリを使用するときにパスワードフィールドが事前に入力されるように、[パスワードの保存]オプションを実装する必要があります。
現在、これが私のやり方です
public class UserSettings
{
//Snip many other properties...
public bool SavePassword { get; set; }
[XmlIgnore]
public string Password
{
get
{
string retVal = string.Empty;
if (ProtectedPassword != null)
{
try
{
retVal = Encoding.UTF8.GetString(ProtectedData.Unprotect(ProtectedPassword, _md5.ComputeHash(Encoding.UTF8.GetBytes(this.Username.ToUpper())), DataProtectionScope.LocalMachine));
}
catch
{
retVal = string.Empty;
}
}
return retVal;
}
set
{
ProtectedPassword = ProtectedData.Protect(Encoding.UTF8.GetBytes(value), _md5.ComputeHash(Encoding.UTF8.GetBytes(this.Username.ToUpper())), DataProtectionScope.LocalMachine);
}
}
public byte[] ProtectedPassword;
private readonly MD5 _md5 = MD5.Create();
public void Save()
{
var xOver = new XmlAttributeOverrides();
//If Save password is false do not store the encrypted password
if (this.SavePassword == false)
{
var xAttrs = new XmlAttributes();
xAttrs.XmlIgnore = true;
xOver.Add(typeof(UserSettings), "ProtectedPassword", xAttrs);
}
XmlSerializer xSer = new XmlSerializer(typeof(UserSettings), xOver);
Directory.CreateDirectory(Path.GetDirectoryName(savePath));
using(var fs = new FileStream(savePath, FileMode.Create))
{
xSer.Serialize(fs, this);
}
}
非公開にしたいProtectedPassword
のですが、公開以外に設定した場合xSer.Serialize(fs, this)
、物件は含まれません。これを正しく機能させるには何をする必要がありますか?
これに似た質問が他にもたくさんあることは知っていますが、.NET 2.0の要件がなく、2.0に制限されている人が利用できないソリューションを使用しているものはありません。習慣を書くか、公XMLSerarlizer
になっているという事実を持って生きる以外の選択肢はありますか?ProtectedPassword