2013-02-13 66 views
0

我有一個用於加密的密碼,並將其存儲到數據庫中,如下的方法:解密方法

public static string Md5Encrypted(string password) 
     { 
      byte[] pass = Encoding.UTF8.GetBytes(password); 
      MD5 md5 = new MD5CryptoServiceProvider(); 
      string strPassword = Encoding.UTF8.GetString(md5.ComputeHash(pass)); 
      return strPassword; 
     } 

現在我想的是decrypt,我從中數據庫獲取密碼的方法在存儲它時通過上述方法進行加密。我不知道該怎麼做。任何人都可以幫助我嗎?

+2

你沒有用MD5加密任何東西。你正在生成一個不可逆的散列。您應該通過爲給定密碼生成散列並將其與存儲的散列進行比較來比較密碼。 – 2013-02-13 09:59:29

+0

扭轉這種情況的唯一方法是猜測正確的密碼。這不是一個好的密碼哈希btw有兩個原因:1)沒有鹽2)MD5很快。您應該使用PBKDF2,bcrypt或scrypt。 – CodesInChaos 2013-02-13 10:01:25

+0

@RanhiruCooray不,我沒有。當我比較新的加密密碼和舊密碼時,即已經存儲在數據庫中的加密密碼時,如果密碼匹配,則不會返回true。該?變成了一個矩形? – Dev 2013-02-13 10:06:01

回答

3

MD5是一個散列函數(不是加密),是不可逆的。也就是說,你不能計算給定散列的原始值。

更新:我推薦本文介紹如何安全地存儲密碼散列。還有一個C#實現。

http://crackstation.net/hashing-security.htm

+0

但是,您通常可以通過猜測許多候選密碼來恢復它,這在實踐中效果很好。 – CodesInChaos 2013-02-13 10:02:07

+0

因此,當我比較新的加密密碼和舊密碼時,如果密碼匹配,它不會返回true。該?被改爲一個圍繞問號的矩形 – Dev 2013-02-13 10:04:11

+0

從技術上講,你不是在顛倒哈希,而是造成了碰撞。當然,最終它對於大多數實際用途都是一樣的。這就是爲什麼你要存儲鹽漬散列並使用像PBKDF2這樣的東西。 – 2013-02-13 10:04:21

0

MD5散列函數是不可逆的,不能被解密,如果要檢查登錄時用戶名和密碼,然後做..

1.While registering a new user, Hash the password and store it in database. 

2.During login,Hash the password entered by the user 

3.Now,Compare the password entered(Hashed) with password stored in database(Hashed) 

4.If both of them are same then allow user to login else display an error 
+2

請停止稱它爲「加密」。 – 2013-02-13 10:11:59

+0

@AndreLoker然後它叫什麼.. – coder 2013-02-13 10:12:50

+0

哈希。您正在創建密碼的散列。 – 2013-02-13 10:13:30

0

您不能解密這一點,因爲哈希是一種單向函數 - 您不能將哈希值變回原始值。

由於它看起來像你正在處理密碼,因此我認爲這是某種登錄機制,這可能(可能)確定。你需要做的是散列密碼(如你所做的那樣),並在用戶在你的網站上註冊時存儲散列值。當用戶返回到您的網站時,您將輸入的密碼,哈希值(使用相同的方法),並將哈希值與您存儲的值進行比較。如果兩個哈希匹配,則輸入正確的密碼。


有一個問題,哈希,在相同的輸入值總是產生相同的散列值(否則爲登錄上述機制將無法正常工作)。不幸的是,這意味着爲例如a dictionary of common passwords生成哈希值是一件小事。如果您的數據庫受到攻擊,攻擊者可以將您存儲的所有哈希密碼與先前計算的值進行比較,如果他獲得匹配,則Bazinga!他已經掌握了你的數據。
爲了防止這種情況發生,當您執行初始哈希操作時,您可以執行的操作是同時生成一些額外的隨機數據,這些數據會隨着密碼被散列而混入其中。這被稱爲(或不常見的現時)。在這一點上,我將引導你去blowdart的Beginning ASP.NET Security(Amazon UK | Amazon US),它討論了所有這些東西 - 哈希,鹽漬和'正確'加密。