2014-07-23 96 views
-1

我正在創建一個SHA384散列。我想解碼這個散列。有沒有可能的方法來做到這一點?請幫助如何解碼SHA384哈希?

以下是代碼即可獲得哈希

public String getHash(String message) { 
    String algorithm = "SHA384"; 
    String hex = ""; 
    try { 
     byte[] buffer = message.getBytes(); 
     MessageDigest md = MessageDigest.getInstance(algorithm); 
     md.update(buffer); 
     byte[] digest = md.digest(); 

     for(int i = 0 ; i < digest.length ; i++) { 
      int b = digest[i] & 0xff; 
      if (Integer.toHexString(b).length() == 1) hex = hex + "0"; 
      hex = hex + Integer.toHexString(b); 
     } 
     return hex; 
    } catch(NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
     return null; 
    } 

} 
+1

你是什麼意思的「解碼哈希」?散列是按設計單向的。 – Henry

+0

像編碼和裝飾在這裏http://md5hashing.net/hashing/sha384 – user3864752

+0

此網站存儲消息和他們的散列在數據庫中。它不適用於任意散列。 – Henry

回答

3

加密安全散列函數是一個函數,給定任意長度的輸入被處理成以這樣的方式固定長度的輸出是不可逆(計算不可行)。這些功能包括MD5和SHA(安全散列算法)系列(1,224,256,384,512等)。

一旦你輸入了散列,就不會回到原來的輸入。該屬性可用於驗證消息完整性,因爲散列相同的消息會生成相同的散列。

您訪問的網站只是並行存儲散列及其輸入,併爲您的散列進行數據庫查找以嘗試查找可能的輸入(如果它以前已添加到數據庫中)。

+0

我可以這樣做嗎?比如通過創建我自己的數據庫並在其中存儲散列,併爲解碼執行數據庫查找? – user3864752

+0

@ user3864752是的,你可以,但你需要建立一個無限大的數據庫來保存所有可能的輸入。我真的不明白你在做什麼。你會做什麼不叫'解碼',而是一個簡單的表查找。 – initramfs

+0

是的,這是正確的。但還有一個問題。我在C#中進行加密,並且想要在Android/java中進行解密 – user3864752