2014-05-23 156 views
-1

請讓我知道等效代碼來解密。我使用這種編碼方法加密了我的密碼,現在我想現在解密。什麼是等效解密代碼

MessageDigest digest = MessageDigest.getInstance("MD5"); 
digest.update(password.getBytes()); 
BASE64Encoder encoder = new BASE64Encoder(); 
byte hashedBytes[] = (new String(digest.digest(), "UTF-8")).getBytes(); 
System.out.println(encoder.encode(hashedBytes)) 
+1

這是[如何解密SHA-256加密字符串?](http://stackoverflow.com/questions/9316437/how-to-decrypt-sha-256-encrypted-string)的重複,差異散列函數並不重要。此外,請閱讀[散列密碼和加密之間的區別](http://stackoverflow.com/questions/326699/difference-between-hashing-a-password-and-encrypting-it) –

+0

您應該閱讀[如何安全地哈希密碼?](http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords)。它解釋了爲什麼你不需要解密來驗證密碼,以及爲什麼MD5甚至SHA-2是密碼哈希的不好選擇。 – CodesInChaos

回答

1

簡短的回答是你不能。 MD5是一個散列,這意味着理論上「加密」的數據不能被轉換回原始數據。這是一個單向函數,(理論上)不能逆轉。請閱讀cryptographic hash functions瞭解更多信息。

這就好像您有機器通過返回書中的頁數來處理書籍。你可以給它一本書,你會得到一個值回來,但僅給出這是不可能告訴什麼在飼餵機輸出


更多細節:

從維基百科對於密碼散列函數頁:

密碼散列函數是散列函數,它任意數據塊,並返回一個固定大小的位串,所述加密散列值,使得任何(意外或故意)改變數據將(以非常高的概率)改變散列值。

理想的加密哈希函數具有四個主要性能:

  • 它是容易計算的散列值對於任何給定消息
  • 是不可行的產生具有給定的散列的消息
  • 修改消息而不更改散列是不可行的
  • 找到兩個具有相同散列的不同消息是不可行的。

注圓點。這意味着這將是有效不可能從哈希生成密碼。當然,MD5被認爲是密碼不安全的,但它仍然意味着沒有從散列到輸入的一般方法。

相關問題