Java преобразует строку в SHA1

#java #sha1

#java #sha1

Вопрос:

Я пытаюсь преобразовать строку в хэш SHA1!

Это мой код

 public static void SHA1(String x) throws NoSuchAlgorithmException
{

    MessageDigest sha1 = MessageDigest.getInstance("SHA1");
    SHA1 = sha1.digest((x).getBytes()); 

}
 

У меня есть private static byte[] SHA1;

К сожалению, результат получается следующим образом

 [B@1a758cb
 

Я пытаюсь сделать код как можно меньше!
Спасибо

Комментарии:

1. Ваш пример даже не будет компилироваться — как вы выводите SHA1? Чего вы ожидаете?

2. Я только что дал код для метода … с небольшой работой вы можете заполнить остальное!

3. @Hego555: не вызывайте getBytes для строки, не указав конкретную кодировку. Это будет использовать кодировку платформы по умолчанию и, следовательно, не приведет к одинаковому результату на всех платформах.

4. @JB Nizet разве SHA1 не одинаков на всех платформах? это не мой код, я получил его из Интернета, просто модифицировал для своих нужд 🙂

5. Я не говорил, что SHA1 не был одинаковым на всех платформах. SHA1 принимает байты в качестве входных данных. Поэтому перед использованием алгоритма SHA1 код преобразует строку (символы Юникода) в байты. Это преобразование не дает того же результата, если кодировка ASCII, UTF-8, UTF-16 или ISO-8859-1. Если вы используете этот алгоритм с заданной строкой в качестве входных данных на двух машинах с разной кодировкой платформы, он приведет к двум разным результатам. Не из-за SHA1, а потому, что вы не преобразуете символы в байты таким же образом.

Ответ №1:

Вам нужно распечатать байты в вашем массиве, и вы, вероятно, захотите отобразить хэш в виде шестнадцатеричного числа.

 for(byte b : SHA1 ) {
  System.out.printf("x",b);
}
System.out.println();
 

Комментарии:

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

2. System.out.println( Arrays.toString(SHA1)); имхо, гораздо более читаемый код, но может не делать то, что вы хотите.

3. @jackrabbit преобразует массивы в строку… я предполагаю, что он просто не может это проверить 🙂 Спасибо за код!

4. Да, точно. Это java.lang. Массивы.