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

时间:2016-09-22 10:51:30

标签: java md5

我有java三个字符串。比方说吧。

$matchThese = ['link.hos_id' => $hos_id, 'outcome.otc_otrdischargedate' => $td];
$icu = DB::table('link')
    ->join('demographic', 'link.lnk_dmgid', '=', 'demographic.dmg_id')
    ->join('admission', 'link.lnk_admid', '=', 'admission.adm_id')
    ->join('outcome', 'link.lnk_otcid', '=', 'outcome.otc_id')
    ->where($matchThese)
    ->where('outcome.otc_outcome', 'like', '%ICU%')
    ->where('outcome.otc_outcome', 'like', '%I.C.U%')
    ->where('outcome.otc_outcome', 'like', '%L3%')
    ->where('outcome.otc_outcome', 'like', '%Level3%')
    ->where('outcome.otc_outcome', 'like', '%Level 3%')
    ->where('outcome.otc_outcome', 'like', '%Intensive Care Unit%')
    ->get();
$icuSize = sizeof($icu);

我想结合这3个字符串并将其更改为md5格式。我该怎么办?我使用MessageDigest类作为一个字符串,但我不知道如何在更改为md5之前附加3个字符串。我想把md5改回字符串。我需要外部库吗?

2 个答案:

答案 0 :(得分:3)

反转MD5并不可行 -

  • 可以有多个字符串给出相同的MD5(称为哈希冲突。)
  • 它被设计为难以“逆转”

您会看到许多提供反向MD5的网站(如 - Option-1option-2)。 这些网站存储已使用的“字符串和MD5 ”的映射(因此,如果您使用复杂的字符串,他们将无法推断原始字符串)。

回到第1部分

MessageDigest可用于计算Java中给定String的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)种组合。

希望它有所帮助。 :)

答案 1 :(得分:2)

MD5 不是格式或加密算法。

MD5是哈希函数。这意味着,长文本要简短消化 - 对于任何非常短的输入,这种转换显然都是有损的。一般来说,没有从MD5回到纯文本。