2010-09-07 69 views
0

我想找到一些如何採取字符串和使用MD5哈希它的樣本,然後能夠將哈希(正確的術語?)回到原始字符串。Java/Scala雙向MD5

有沒有人知道任何文件,顯示如何做到這一點,或理想的情況下,他們可以分享任何示例代碼?

我讀過關於java.security.MessageDisgest類,但似乎只是單向的。我需要能夠將散列轉換回原始數據。 MD5是最好的算法,還是我應該看看其他的東西?

+2

如果我看到做安全問題的人問這樣的問題,我很生氣。但至少他問... – soc 2010-09-07 08:28:04

+0

@soc,你必須從某處開始!也許你不記得了,但你肯定也在那裏。 @Jason,如果你需要扭轉一些MD5,你可以嘗試在Google上搜索它們。開玩笑...但你應該嘗試...這就是爲什麼我不再做單哈希值。反覆使用種子並重復散列數據。這一次只需遵循@ Synesso的建議。 =) – 2010-09-09 03:14:31

+0

是的,我承認我提前解決了這個問題。如果我做了一些更初步的研究,我可能不會問這個問題,但我很欣賞這些答覆和建議。我一定會考慮使用HTTPS。 – 2010-09-09 19:28:52

回答

8

MD5具有破壞性。散列時會丟失數據。

也許你正在尋找一個對稱密碼,如DES或(更好)AES?

的BouncyCastle的安全提供具有http://www.bouncycastle.org/specifications.html

編輯DES實現的例子:對不起,我已經偷步。你的目標是什麼:壓縮,索引,校驗,加密或其他?

+0

我的場景是需要加密客戶端的一些數據(javascript),將這些加密數據發送到Web服務器後端,並將其解密以用於連接到第三方FTP服務器。 – 2010-09-07 01:58:35

+0

你不妨使用HTTPS呢? – porges 2010-09-07 02:00:36

+0

加密將由HTTPS提供。這將防止未經授權的讀取或修改,同時消息在網絡上。這足夠嗎? – Synesso 2010-09-07 02:01:35

5

散列函數被設計成不可逆的。

您需要的是使用安全傳輸層,如SSL或TLS(例如:HTTPS是帶SSL或TLS的HTTP)。 Please refrain from rolling your own在這一個。

請注意,簡單地在客戶端(例如:Javascript)上使用像AES這樣的對稱密碼是無用的,因爲您需要將密鑰提供給所述客戶端,因此攻擊者能夠平均解密任何截獲的消息。

+0

SSL通常使用AES來進行實際的數據加密。在實踐中,「公開密鑰加密」是一個輕微的誤稱,因爲與公共密鑰交換的整個舞蹈通常用於派生共享密鑰,該密鑰與*完全*不同的算法(通常是AES)一起使用。 – 2010-09-07 02:56:39

+1

@Daniel是的,但整個初始舞蹈是確保沒有人知道對稱密鑰:) – NullUserException 2010-09-07 03:01:33

+1

我只是想指出,你對AES的建議是誤導性的,它應該建議對直接祕密密鑰交換。只要使用公鑰/私鑰來派生共享密鑰,AES就可以了(甚至在客戶端上)。 – 2010-09-07 17:16:06