Хэш Sha256, сгенерированный из Java, отличается от утилит OpenSSL и Sha256Sum.Зачем? - PullRequest
1 голос
/ 30 марта 2019

Вот код Java, который генерирует хэш sha256 для строки в Java.

public static void main(){

    String data = "hello world";

    // Generate the Sha256 hash using Apache Common Codec library
    String hash = DigestUtils.sha256Hex( data);

    System.out.println("Apache : Sha256hash: "+ hash);

    // Generate Sha 256 hash by using guava library
    final String hashed = Hashing.sha256()
            .hashString(data, StandardCharsets.UTF_8)
            .toString();


    System.out.println("Guava  : Sha256hash: "+ hashed);
}

Когда я запускаю программу, я получаю следующие значения. Оба хэша абсолютно одинаковы.

Apache : Sha256hash: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Guava  : Sha256hash: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

Теперь я сгенерировал хеш Sha256 для строки "hello world" из командной строки.

командная строка util sha2

echo "hello world" | sha2 -256
SHA-256 ((null)) = a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447

OpenSSL util

echo 'hello world' | openssl dgst -sha256
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447

Как видно из этих примеров, значения, сгенерированные из командной строки, отличаются от значений, сгенерированных из Java (Apache и Guava)

Строка ввода такая же, но хэши разные. Почему эта разница происходит?

1 Ответ

4 голосов
/ 30 марта 2019

Я буквально недавно пересмотрел этот ответ.

Проблема в том, что echo добавляет новую строку в ваши данные.Если вы используете echo -n или openssl dgst -sha256 <<< 'hello world', вы получите правильное значение.

См. OpenSSL создает хэш SHA из оболочки stdin

...