Java将字符串转换为MD5,反之亦然

4

我有三个Java字符串,比如说这个例子。

String test = "Hi, ";
String test1 = "this is ";
String test2 = "Java programming!";

我想把这3个字符串合并并转换为md5格式,应该怎么做?我已经使用MessageDigest类对一个字符串进行了处理,但不知道如何将3个字符串追加在一起再进行md5处理。另外,我也想将md5转换回字符串,需要使用外部库吗?


你不能将md5还原。它不是加密或编码 - 它是哈希。只需连接您的字符串即可。 - RealSkeptic
2个回答

7

反转MD5不是真正可行的,因为:

  • 可能会有多个字符串产生相同的MD5(这被称为哈希碰撞)
  • 它被设计成难以“反转”

您可能已经看到了很多提供反向MD5的网站(例如-选项1选项2)。 这些网站存储已使用的“字符串和MD5”的映射(因此,如果您使用复杂字符串,它们将无法推断出原始字符串)。

回到第一部分

MessageDigest可以用于在Java中计算给定字符串的MD5。其使用非常简单-

        String testString="someText";
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(testString.getBytes());
        BigInteger number = new BigInteger(1, messageDigest);
        String hashtext = number.toString(16);

在您的问题中,这取决于您想要如何创建哈希 -

方法1 - 正如您所请求的那样,我们可以有 -

StringBuilder simpleString=new StringBuilder(test);
simpleString.append(test1);
simpleString.append(test2);
String testString=simpleString.toString();

最后,使用testString作为输入调用上述定义的方法。

方法2 - 我建议您使用MD5的MD5来获得安全校验和。

Output = MD5(MD5(test)+MD5(test1)+MD5(test2))

您可以尝试对一个由3个字符组成的字符串进行暴力破解攻击。假设只允许使用英文字母(A-Z,a-z)和数字(0-9),在这种情况下,只有623(238,328)种组合。

希望这可以帮助您。 :)


3

MD5不是一种格式,也不是加密算法。

MD5是一个哈希函数。这意味着,将长文本转换为短摘要 - 对于除非很短的输入,否则此转换显然会有损失。通常情况下,从MD5无法还原为纯文本。


好的,那我有一个问题。我将3个字符串转换为哈希码。MD5是否会为不同的字符串产生重复的字符?如果我要转换一千个字符串。 - sai aung myint soe
是的,MD5 可以为两个不同的输入产生相同的输出,但是即使对于两个(甚至一千个)不同的随机输入,发生这种情况的可能性也非常小。 - Jiri Tousek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接