2013-04-16 55 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