#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. Массивы.