Java 与 Linux 之间的 Sha256 校验和差异
Sha256 checksum difference between Java vs Linux
我正在编写一个应用程序,在将文件发送到下游之前计算文件的校验和。在下游应用程序中,linux shell 脚本用于处理文件。请注意,从 Java 应用程序计算的校验和与使用 Linux 命令 'sha256sum'.
计算的校验和不匹配
下面是 JAVA 中的代码片段:
public static String calculateChecksum(File file) throws IOException {
try (InputStream inputStream = FileUtils.openInputStream(file)) {
return DigestUtils.sha256Hex(inputStream); //from org.apache.commons.codec.digest
}
}
使用 java api 我得到的校验和值为:
d05a9724479af8a7a20f7acff3629b0dd8aaa447ec821b4b31708bc43eb99841
但是当使用 Linux 命令 'sha256sum <file>
' 为同一文件计算校验和时,它给出
37f865eb2a3956e3f903eaaf92f0459143cf9b9699a7d1d6bc91bfc89ad5eb8c
以下是文件包含的内容。您可以创建包含以下内容的文件。我正在使用 abc.txt。它有换行符。
dscscsdvcs
kkl
有人能指出这里出了什么问题吗?文件未损坏。源和目标的内容相同。
我能够从两个不同的文件中获得两个摘要。查看他们的十六进制转储:
d05a9724479af8a7a20f7acff3629b0dd8aaa447ec821b4b31708bc43eb99841:
00000000: 6473 6373 6373 6476 6373 0d0a 0d0a 6b6b dscscsdvcs....kk
00000010: 6c l
37f865eb2a3956e3f903eaaf92f0459143cf9b9699a7d1d6bc91bfc89ad5eb8c:
00000000: 6473 6373 6373 6476 6373 0a0a 6b6b 6c dscscsdvcs..kkl
区别在于行尾类型,*nix 与 MSWin。
文件大小不一样,分别是 15 字节和 17 字节。
Java 给出相同的结果。
我正在编写一个应用程序,在将文件发送到下游之前计算文件的校验和。在下游应用程序中,linux shell 脚本用于处理文件。请注意,从 Java 应用程序计算的校验和与使用 Linux 命令 'sha256sum'.
计算的校验和不匹配下面是 JAVA 中的代码片段:
public static String calculateChecksum(File file) throws IOException {
try (InputStream inputStream = FileUtils.openInputStream(file)) {
return DigestUtils.sha256Hex(inputStream); //from org.apache.commons.codec.digest
}
}
使用 java api 我得到的校验和值为:
d05a9724479af8a7a20f7acff3629b0dd8aaa447ec821b4b31708bc43eb99841
但是当使用 Linux 命令 'sha256sum <file>
' 为同一文件计算校验和时,它给出
37f865eb2a3956e3f903eaaf92f0459143cf9b9699a7d1d6bc91bfc89ad5eb8c
以下是文件包含的内容。您可以创建包含以下内容的文件。我正在使用 abc.txt。它有换行符。
dscscsdvcs
kkl
有人能指出这里出了什么问题吗?文件未损坏。源和目标的内容相同。
我能够从两个不同的文件中获得两个摘要。查看他们的十六进制转储:
d05a9724479af8a7a20f7acff3629b0dd8aaa447ec821b4b31708bc43eb99841:
00000000: 6473 6373 6373 6476 6373 0d0a 0d0a 6b6b dscscsdvcs....kk
00000010: 6c l
37f865eb2a3956e3f903eaaf92f0459143cf9b9699a7d1d6bc91bfc89ad5eb8c:
00000000: 6473 6373 6373 6476 6373 0a0a 6b6b 6c dscscsdvcs..kkl
区别在于行尾类型,*nix 与 MSWin。
文件大小不一样,分别是 15 字节和 17 字节。
Java 给出相同的结果。