【发布时间】:2021-08-16 15:40:42
【问题描述】:
正在编写一个应用程序,在将文件发送到下游之前计算文件的校验和。在下游应用程序中,使用 linux shell 脚本来处理文件。注意到从 Java 应用程序计算的校验和与使用 Linux 命令 'sha256sum' 计算的校验和不匹配。
下面是JAVA中的sn-p代码:
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
有人能指出这里出了什么问题吗?文件未损坏。来源和目的地的内容相同。
【问题讨论】:
-
您是否得到相同的校验和,例如一个空文件?
-
@choroba ...是的,用于空文件校验和匹配。
-
我能够编译您的代码,它为 953 MB 的文件返回与 sha256sum 实用程序相同的校验和。
-
@choroba,我已经添加了文件的内容。请将文本复制到 abc.txt 中,然后尝试计算校验和值。已更新早期的校验和值。
-
这个问题 -1 的原因是什么?
标签: java linux shell checksum sha256