【问题标题】:Sha256 checksum difference between Java vs LinuxJava与Linux之间的Sha256校验和差异
【发布时间】: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


【解决方案1】:

我能够从两个不同的文件中获取两个摘要。查看他们的 hexdump:

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 给出相同的结果。

【讨论】:

  • 感谢 choroba 的检查。我们如何在 Java 中处理这个问题?
  • 你要处理什么?我在 shell 和 Java 中都得到了不同的摘要。
  • 如何将文件从一个系统复制到另一个系统?
  • 如果要按原样传输文件,请使用binary 传输类型。
猜你喜欢
  • 1970-01-01
  • 2020-05-16
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2018-08-14
  • 1970-01-01
相关资源
最近更新 更多