2014-09-03 3 views
1

Я новичок в безопасности Java, так что это может звучать глупо для вас, ребята. Я использую алгоритм triple-des для шифрования в том, что я использую хеш-значение в качестве ключей. Я использую sha-512 для хеширования, я слышал, что два одинаковых хеша будут такими же, но я получаю разные выходные данные для одной строки. Я прикрепляю код sha-512. Позвольте мне знать, в чем проблема, если это возможно.sha-512, возвращающий другое значение для той же строки

public class SHA256Algo { 

    public static String createHash(String text) throws UnsupportedEncodingException, NoSuchAlgorithmException 
    { 
     String encryptedText = "" ; 
     MessageDigest md = MessageDigest.getInstance("SHA-512"); 

     md.update(text.getBytes("UTF-16")); // Change this to "UTF-16" if needed 
     byte[] digest = md.digest(); 
     String str = digest.toString() ; 
     return str ; 
    } 

    public static void main(String[] args) { 
     try { 
      System.out.println(createHash("tarun")) ; 
      System.out.println(createHash("tarun")) ; 
     } catch (UnsupportedEncodingException | NoSuchAlgorithmException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

выход:
[B @ 32d2bb53
[B @ 29086036

+1

toString() в массиве не имеет ожидаемого эффекта. – Arkadiy

+0

Можете ли вы использовать сторонние библиотеки? Это было бы намного проще, если бы вы могли использовать Hash.sha512() в Guava. HashString (текст, Charsets.UTF_16) .toString() ', который выполнит именно то, что вы хотите. –

ответ

4

Массивы являются объектами тоже в Java, но они не отменяют Object «s toString() метод. Выходной сигнал не является хешированным выходом, а результатом Object's toString() method.

[T] его метод возвращает строку, равную значению:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

getClass().getName() отвечает за [B, то есть @ характер, а остальные символы являются шестнадцатеричный хэш-код, также от Object.

Вам необходимо преобразовать массив byte в String другим способом, кроме звонка toString(). Это может включать преобразование байтового массива в Base 64 или в шестнадцатеричные символы.

+0

спасибо за ваше время, можете ли вы дать мне пример кода для этого конкретного преобразования. –

+0

@tarunverma взглянуть на байтовый и строковый API для метода вроде * parse * или * value *. Посмотрите на их javadoc. Все это должно быть легко, если у вас [eclipse] (http://www.eclipse.org/downloads/index-developer.php) настроено [красиво] (http://superuser.com/questions/167458/how -в-добавить-Javadocs-к-затмению). – Pureferret

+0

спасибо всем, я нашел выход, чтобы преобразовать его в строку. Я разделяю код, надеюсь, что он помогает другим ... 'byte [] digest = md.digest(); \t \t StringBuffer hexString = new StringBuffer(); \t for (int i = 0; i

Смежные вопросы