Вот код 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)
Строка ввода такая же, но хэши разные. Почему эта разница происходит?