【问题标题】:Sha256 hash generated from Java differs from OpenSSL and Sha256Sum utilities. Why?从 Java 生成的 Sha256 哈希与 OpenSSL 和 Sha256Sum 实用程序不同。为什么?
【发布时间】:2019-03-30 05:25:00
【问题描述】:

这是一个 java 代码,它为 java 中的字符串生成 sha256 哈希。

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

现在,我从命令行为字符串“hello world”生成了 Sha256 哈希。

命令行工具 sha2

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

OpenSSL 工具

echo 'hello world' | openssl dgst -sha256
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447

从这些示例中您可以看到,命令行生成的值与 Java(Apache 和 Guava)生成的值不同

输入字符串相同,但哈希值不同。为什么会出现这种差异?

【问题讨论】:

    标签: java apache openssl guava sha256


    【解决方案1】:

    我最近确实对这个答案进行了修改。

    问题是 echo 为您的数据添加了换行符。如果您使用echo -nopenssl dgst -sha256 <<< 'hello world',您将获得正确的值。

    OpenSSL create SHA hash from shell stdin

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 2016-07-09
      • 2017-01-02
      • 1970-01-01
      • 2011-06-08
      • 2023-02-23
      相关资源
      最近更新 更多