我使用Java的MessageDigest来进行哈希项目。我想用随机生成的字符串创建的哈希创建冲突。我已经确认我的字符串是真正随机的。当我输出摘要时,它始终以" [B @"由于某种原因,当我试图用8位检测到碰撞时,显然一切都以" ["。这是我的代码:
public boolean encrypt(String x) throws Exception {
System.out.println("x is " + x);
java.security.MessageDigest d = java.security.MessageDigest.getInstance("SHA-1");
d.update(x.getBytes());
d.reset();
String result = d.digest().toString() + " ";
char[] tempCharArray = result.toCharArray();
String bitArray = "";
for(int i=0; i< tempCharArray.length; i++){
bitArray += String.format("%8s", Integer.toBinaryString(tempCharArray[i] &
0xff)).replace(' ', '0');
}
result = bitArray.substring(0,8);
return result;
}
有没有人见过这个/知道怎么做才能做到这一点?感谢
答案 0 :(得分:2)
你看起来在你的代码中做了一些奇怪的事情。
首先,你打电话;
String result = d.digest().toString()
..它将为您提供string representation of a byte array object,它由类名,“@”符号和哈希码组成。 Arrays have a class name of "[B",因此你总会得到一些东西“[B @”。
其次,您拨打d.update(x.getBytes())
,然后立即致电d.reset()
。即使您解决了第一个问题,也无法消化任何内容,无论x
的价值如何,因此您始终会获得相同的结果,the SHA-1 hash of an empty string,即da39a3ee5e6b4b0d3255bfef95601890afd80709
。