2017-04-20 70 views
-2

我如何解密這種哈希加密類型,因爲我不知道該方法或有解密碼?解密散列

public string EncryptPassword(string password) 
     { 
      var bytes = new UTF8Encoding().GetBytes(password); 
      byte[] hashBytes; 
      using (var algorithm = new System.Security.Cryptography.SHA512Managed()) 
      { 
       hashBytes = algorithm.ComputeHash(bytes); 
      } 
      return Convert.ToBase64String(hashBytes); 
     } 
    } 
+2

散列是單向轉換。 – Nino

+0

散列與加密不同。對於更簡單的哈希算法,您可以嘗試使用彩虹表進行暴力破解,但[可能不適用於SHA512](https://security.stackexchange.com/questions/44171/are-there-sha-512-rainbow-tables-available ) – stuartd

+0

我懷疑你希望能夠將密碼發回給用戶。在決定最好不要散列密碼之前,請參閱[散列密碼的最佳做法](http://stackoverflow.com/a/20186472/402022)和[通過電子郵件恢復/重置丟失的密碼選項](http: //stackoverflow.com/a/13330223/402022)。 – Theraot

回答

3

由於SHA512是單向散列,因此無法解密該值。

下面是一些關於如何不能解密的詳細信息:How to decrypt SHA-512 hashed data

+0

所以我可以從我的項目中刪除它,而不會產生任何錯誤? –

+0

@thlakkhthlakkh我不認爲你應該刪除這樣的功能......它可能會影響用戶的日誌等...... – Nino

+1

你應該可能希望你的密碼被加密,但是如果你想清除你可以刪除加密文字密碼 – Avitus

0

這是很好的哈希密碼保存在數據庫中,因爲它們不能被逆轉。人們傾向於在不同的系統上使用相同的密碼,這增加了攻擊者可以從一個系統學習密碼並在另一個系統上嘗試密碼的風險。如果您的系統遭到入侵,您在密碼散列時可以保護用戶。

從技術上講,你的函數應該被命名爲「HashPassword」而不是「EncryptPassword」,因爲加密和散列並不是一回事。加密是可逆的 - 您可以解密並獲取原始內容。哈希是「單向」 - 就像總結一個數字列表一樣。您可以通過再次總結和比較來驗證數字未發生變化,但您無法僅從總和中生成數字列表。哈希以相同的方式工作。

向前發展的最佳選擇是繼續使用散列並創建不需要知道用戶密碼的流程和策略。在登錄時,您散列提交的密碼並比較散列值,而不是直接比較密碼。如果有人不記得他們的密碼,您可以通過電子郵件向他們發送令牌,讓他們重置密碼,而不是通過電子郵件向他們發送密碼。