C# 如何在winform应用程序中保存登录?

C# 如何在winform应用程序中保存登录?,c#,winforms,web-services,authentication,C#,Winforms,Web Services,Authentication,我有一个winform应用程序和一些web服务的登录列表。在检查“记住我”时,我将字典与加密密码一起序列化到一个文件中,但我想知道这是否是做这种事情的最佳实践。。 这是我的密码 public void LoginsInit() { FileStream file = new FileStream(loginsFilePath, FileMode.OpenOrCreate); try { BinaryFormatter formatter = new BinaryFormatt

我有一个winform应用程序和一些web服务的登录列表。在检查“记住我”时,我将字典与加密密码一起序列化到一个文件中,但我想知道这是否是做这种事情的最佳实践。。 这是我的密码

public void LoginsInit()
{
  FileStream file = new FileStream(loginsFilePath, FileMode.OpenOrCreate);
  try
  {
    BinaryFormatter formatter = new BinaryFormatter();
    loginsDictionary = (Dictionary<string, string>)formatter.Deserialize(file);
    string[] allusers = loginsDictionary.Keys.ToArray();
    int usersCount = allusers.Length;
    userNameTextBox.Text = allusers[usersCount - 1];
  }
  catch (SerializationException ex)
  {
    loginsDictionary = new Dictionary<string, string>();
    Console.WriteLine("Failed to open file: " + ex.Message);
  }
  finally
  {
    file.Close();
  }
}

private void login_Click(object sender, EventArgs e)
{
  //LoginToService();
  string username;
  string password;
  username = serviceClientReference.UserLogin = userNameTextBox.Text;
  password = serviceClientReference.Password = EncryptDecrypt.Encrypt(this.passwordTextBox.Text, EncryptDecrypt.c_strEncryptkey1, EncryptDecrypt.c_strEncryptkey2);

  if (rememberMe.Checked)
  {
    if (loginsDictionary.ContainsKey(username))
      loginsDictionary[username] = password;
    else
      loginsDictionary.Add(username, password);
  }
  FileStream file = new FileStream(loginsFilePath, FileMode.Create);
  try
  {
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(file, loginsDictionary);
    file.Flush();
  }
  catch (SerializationException ex)
  {
    Console.WriteLine("Failed to open file: " + ex.Message);
  }
  finally
  {
    file.Close();
  }

  string errorStr;
  int errorNo;
  try
  {
    bool res = serviceClientReference.EstablishConnection(out errorStr, out errorNo);
    if (!res)
    {
      MessageBox.Show(errorStr);
    }
  }
  catch (Exception exception)
  {
    Logger.Log(TraceLevel.Error, "", exception);
    MessageBox.Show("Fatal Error Unable to login to MU");
  }
}

private void usernameTextBox_TextChanged(object sender, EventArgs e)
{
  if (loginsDictionary.ContainsKey(userNameTextBox.Text))
    passwordTextBox.Text = EncryptDecrypt.Decrypt(loginsDictionary[userNameTextBox.Text], EncryptDecrypt.c_strEncryptkey1, EncryptDecrypt.c_strEncryptkey2);
}
public void LoginsInit()
{
FileStream file=newfilestream(loginsFilePath,FileMode.OpenOrCreate);
尝试
{
BinaryFormatter formatter=新的BinaryFormatter();
loginsDictionary=(字典)格式化程序。反序列化(文件);
string[]alluser=loginsDictionary.Keys.ToArray();
int userscont=allusers.Length;
userNameTextBox.Text=alluser[userscont-1];
}
catch(SerializationException-ex)
{
loginsDictionary=新字典();
Console.WriteLine(“无法打开文件:+ex.Message”);
}
最后
{
file.Close();
}
}
私有无效登录\u单击(对象发送者,事件参数e)
{
//LoginToService();
字符串用户名;
字符串密码;
username=serviceClientReference.UserLogin=userNameTextBox.Text;
password=serviceClientReference.password=EncryptDecrypt.Encrypt(this.passwordTextBox.Text,EncryptDecrypt.c_strengcryptkey1,EncryptDecrypt.c_strengcryptkey2);
如果(请记住,已选中)
{
if(loginsDictionary.ContainsKey(用户名))
loginsDictionary[用户名]=密码;
其他的
添加(用户名、密码);
}
FileStream file=newfilestream(loginsFilePath,FileMode.Create);
尝试
{
BinaryFormatter formatter=新的BinaryFormatter();
序列化(文件、登录字典);
Flush()文件;
}
catch(SerializationException-ex)
{
Console.WriteLine(“无法打开文件:+ex.Message”);
}
最后
{
file.Close();
}
字符串错误str;
国际恐怖主义;
尝试
{
bool res=serviceClientReference.EstablishConnection(out errorStr,out errorNo);
如果(!res)
{
MessageBox.Show(errorStr);
}
}
捕获(异常)
{
Logger.Log(TraceLevel.Error,“,异常);
MessageBox.Show(“无法登录MU的致命错误”);
}
}
私有void usernameTextBox\u TextChanged(对象发送者,事件参数e)
{
if(loginsDictionary.ContainsKey(userNameTextBox.Text))
passwordTextBox.Text=EncryptDecrypt.Decrypt(登录字典[userNameTextBox.Text],EncryptDecrypt.c_StrencyKey1,EncryptDecrypt.c_StrencyKey2);
}

< /代码> 您可能想考虑使用密钥来管理。

您可能需要考虑使用密钥来管理。

如果您试图保存用户特定的“强>设置<强>应用程序实例,则应检查内置到.NET中的内容。这为您提供了持久化和重新加载功能(需要一些配置)。此外,还提供了额外的安全性和功能。无论您使用什么,请继续加密密码

如果您试图跨应用程序实例保留特定于用户的设置,则应检查.NET中内置的。这为您提供了持久化和重新加载功能(需要一些配置)。此外,还提供了额外的安全性和功能。无论您使用什么,请继续加密密码

在管理密码等敏感信息时,最好使用
存储您的凭据。

在管理密码等敏感信息时,最好使用该类
存储您的凭据。

记忆我功能是否随着时间的推移而良好(应用程序关闭并重新打开),还是仅用于应用程序当前的疯狂状态?它随着时间的推移而良好。在开始构建时调用LoginsInit()来实例化保存文件中的口述体。记住我的功能是否随时间而变好(应用程序关闭并重新打开),还是仅用于应用程序当前的疯狂?随时间而变好。在初始构造时调用LoginsInit()以从保存的文件实例化口述