2014-09-19 1 views
0

Я использую MessageDigest Java для создания хэширующего проекта. Я хочу создать столкновение с хэшами, создаваемыми случайно генерируемыми строками. Я проверил, что мои строки действительно случайны. Когда я выводил дайджест, он всегда начинается с «[B @» по какой-то причине, и когда я пытаюсь обнаружить столкновение с 8 бит, очевидно, все начинается с «[». Вот мой код:Java messageDigest funky output

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; 
} 

Кто-нибудь видел это раньше/знает, что делать, чтобы все исправить? Спасибо

ответ

2

Вы хотите сделать что-то странное в своем коде.

Сначала позвоните;

String result = d.digest().toString() 

..which собирается дать вам 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.