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