Java MessageDigest MD5未返回预期结果

时间:2015-07-14 06:26:48

标签: java hash md5 digest message-digest

我非常无聊所以我正在制作一个实验性的Brute Forcer。但是,我遇到了MD5的一些问题。我得到两个非常不同的输出,

1aabac6d068eef6a7bad3fdf50a05cc8
-7d881f6ef28afe6a4bb78689e91f6e53

第一个有效且为dd,第二个无效,即使我删除了前导连字符。

我正在查看this answer,我调整了解决了我的主要问题,但我仍然得到了无效的MD5。

我的代码:

public boolean testValidity(String s) {
    try {
        MessageDigest md = MessageDigest.getInstance(name());
        byte[] hashDigest = md.digest(s.getBytes("UTF-8"));
        String hash = String.format("%032x", new BigInteger(md.digest(s.getBytes("UTF-8"))));
        System.out.println(hash);
        return getCompare().equalsIgnoreCase(hash);
    } catch (NoSuchAlgorithmException | UnsupportedEncodingException | NullPointerException e) {
        e.printStackTrace();
        return false;
    }
}

在上文中,name()只获取"MD5"getCompare()获取哈希值以进行比较。

我的问题是,如何修复我的代码以确保所有MD5都有效?

1 个答案:

答案 0 :(得分:2)

你的BigInteger构造函数使用二进制补码。使用符号/幅度变量代替第一个参数1. http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger(int,%20byte[])