2013-04-16 56 views
0

考虑对我的登录表单进行一些修改,而不是将我的代码中的密码作为变量存在一种方法,我可以加密它并将其存储在文本文件中,我想登录它的时间比较文本文件的密码?基本的密码加密和存储在一个文件中的密码

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"); 
     } 
+1

基本上,你要找的字符串加密,这是有据可查的,请参阅[在.NET中加密/解密字符串](http://stackoverflow.com/questions/202011/encrypt-decrypt-string-in-net)。 –

+1

你是否至少在Google上搜索了一秒钟,到目前为止你尝试过了些什么。 (哦,并且对你的问题提出质疑,那可能) –

回答

2

你肯定可以,简单的写密码SHA1 - 或更好 - 在您的文件SHA2加密,每次进行比较(感谢J.斯蒂恩为metioning!),但我强烈建议您做这 - 这根本不安全。

+1

即使对于像这样的不安全方法,也不要建议MD5。该散列算法是密码破坏的。实际上,SHA1也相当不安全。 SHA2似乎是一个足够强大的算法。 =) –

+0

感谢您的提示,我更新了我的答案:-) – akluth

0

那么,你可以让程序拥有自己的加密代码。例如,将它全部改为“kra /”。

但正如上面提到的那样,这不是安全的。但取决于你的使用,它可能不一定是。

+2

请不要暗示这样的事情,.NET中的加密和散列操作可能比创建自己的替换方法更容易,而且更安全。 – Satal

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

+0

完全同意你的说法,我在第一个链接中提到。我会添加到答案,以及虽然:) – Satal