2013-05-22 50 views
0

我在一個Java程序中的字符串變量,我知道它是由下面的代碼生成:如何解碼由Hashing.murmur3_32()編碼的長變量?

public static String code(String text) { 
    final byte[] bytes = text.getBytes(); 
    HashCode hc = Hashing.murmur3_32().hashBytes(bytes, 0, bytes.length); 
    long tmp = hc.asInt(); 

StringBuilder sb = new StringBuilder(""); 
    sb.append(Integer.toHexString((int) tmp)); 
    return sb.toString(); 
} 

我怎麼能解碼這個變量來獲取原文?

+1

如果你想知道如何,一定要寫一篇關於你的成就的CompSci論文! –

+0

請參閱http://security.stackexchange.com/questions/11717/why-are-hash-functions-one-way-if-i-know-the-algorithm-why-cant-i-calculate-t – Thihara

+0

整個散列的一點是,這是不可能的。 –

回答

1

不幸的是,你不能。哈希函數意味着是單向的。此外,會有幾個不同的字符串產生相同的散列,因此不可能恢復明文。

0

不,沒有這樣的方法。散列函數是有損的。

當你考慮它時,所有可能的字符串的集合比所有可能的整數的集合大得多,這使得雙向映射成爲不可能。

如果有可能從其哈希碼中恢復字符串,那將允許將任意數量的數據壓縮成單個int,然後才能夠完美地重構它。