考虑对我的登录表单进行一些修改而不是将密码作为变量放在我的代码中有一种方法我可以加密它并将其存储在文本文件中,所以每次我想登录它都会比较来自文本文件的密码??
private void button1_Click(object sender, EventArgs e)
{
string username1 = "Richard";
string password1 = "Peugeot";
if (this.textBox1.Text == username1 && this.textBox2.Text == password1)
{
MessageBox.Show("Welcome Richard!", "Welcome");
Form1 frm = new Form1();
frm.Show();
this.Hide();
}
else
MessageBox.Show("Incorrect username or password", "Bad credentials");
}
答案 0 :(得分:2)
你确定可以,只需在你的文件中写入密码SHA1 - 或更好 - SHA2加密并每次比较它(感谢J. Steen提供的!),但我强烈建议你不这样做 - 这根本不安全。
答案 1 :(得分:2)
我建议将密码存储为哈希而不是加密(哈希是加密可逆的一种方式)。我在这里写过这篇文章(Password storage, how to do it right)。
我还编写了一段代码来使用SHA512对字符串进行哈希处理,代码在VB.NET中,但将它移到C#应该非常简单,代码在这里可用(Calculate the SHA512 hash of string or file)
如果您对密码进行散列并将其与存储在文件中的散列进行比较,如果两者匹配,则它们提供的密码与最初散列的密码相同。
正如J. Steen在下面的评论中提到的那样,我还没有明确表示你也应该对你的哈希进行加盐,这是在对它进行哈希处理之前在密码中添加一个预定义的字符串。这使得任何人都难以强行使用纯文本。因此,例如,如果密码是Password1
(我知道什么是令人惊讶的密码),您可以添加一个字符串,将其存储在应用程序中,如~{}:@>?!"£$)&(*$
。然后,您将散列值~{}:@>?!"£$)&(*$Password1
。如果要检查用户是否在登录中提供了相同的密码,则使用相同的盐以及它们提供的密码。
希望这能解释一下,如果没有,你觉得第一个链接无法让你理解,请随时告诉我:D
答案 2 :(得分:0)
好吧,你可以让程序拥有自己的加密代码。例如,将所有'a'更改为“kra /".
但正如上面提到的那样,这不是安全的。但根据您的使用情况,可能不一定。