Java MessageDigest MD5 未返回预期结果

Java MessageDigest MD5 Not Returning Expected Outcome

我感到非常无聊,所以我正在制作一个实验性的 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 都有效?

您的 BigInteger 构造函数使用二进制补码。使用 sign/magnitude 变体而不是第一个参数 1。http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger(int,%20byte[])