2010-09-07 68 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