从 Java 生成的 Sha256 哈希不同于 OpenSSL 和 Sha256Sum 实用程序。为什么?
Sha256 hash generated from Java differs from OpenSSL and Sha256Sum utilities. Why?
这是一个 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 哈希。
命令行 util sha2
echo "hello world" | sha2 -256
SHA-256 ((null)) = a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
OpenSSL 实用程序
echo 'hello world' | openssl dgst -sha256
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
正如您从这些示例中看到的,从命令行生成的值不同于从 Java(Apache 和 Guava)生成的值
输入的字符串相同,但哈希不同。为什么会出现这种差异?
我最近确实对这个答案进行了修改。
问题是 echo 向您的数据添加了换行符。如果您使用 echo -n
或 openssl dgst -sha256 <<< 'hello world'
,您将获得正确的值。
见OpenSSL create SHA hash from shell stdin
这是一个 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 哈希。
命令行 util sha2
echo "hello world" | sha2 -256
SHA-256 ((null)) = a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
OpenSSL 实用程序
echo 'hello world' | openssl dgst -sha256
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
正如您从这些示例中看到的,从命令行生成的值不同于从 Java(Apache 和 Guava)生成的值
输入的字符串相同,但哈希不同。为什么会出现这种差异?
我最近确实对这个答案进行了修改。
问题是 echo 向您的数据添加了换行符。如果您使用 echo -n
或 openssl dgst -sha256 <<< 'hello world'
,您将获得正确的值。
见OpenSSL create SHA hash from shell stdin