Java messageDigest时髦的输出

时间:2014-09-19 02:01:27

标签: java message-digest

我使用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;
}

有没有人见过这个/知道怎么做才能做到这一点?感谢

1 个答案:

答案 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