計算されたチェックサムが一致しない場合に無効なチェックサムを表示する方法

計算されたチェックサムが一致しない場合に無効なチェックサムを表示する方法

次のようにファイルのチェックサムを確認したいとします。

echo '760382d5e8cdc5d0d079e8f754bce1136fbe1473be24bb885669b0e38fc56aa3  emacs-26.1.tar.gz' | \
  sha256sum --check

ファイルが破損してチェックサムが正しくない場合は、sha256sum次のメッセージが表示されます。

emacs-26.1.tar.gz: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match

ファイルの実際のチェックサム(このエラーメッセージを引き起こした誤ったチェックサム)を知りたいです。私のオプションは何ですか?可能であれば、チェックサムを2回計算したくありません(一度は「FAILED」メッセージを見て、2番目は間違ったチェックサムをチェックします)。

(オペレーティングシステム:Ubuntu 20.04)

ベストアンサー1

coreutilsGNU実装のソースコードであるperlone(shasum)またはast-open one()を見ると、sumどちらも確認モードで計算された合計を出力するように指示されません。

これを使用すると、perl修正が簡単です。

--- shasum.orig 2021-03-27 08:01:06.927965948 +0000
+++ shasum  2021-03-27 08:02:33.336241906 +0000
@@ -295,7 +295,7 @@
            $isOK = 1;
            $num_OK++;
        }
-       else { $rsp .= "FAILED\n"; $err = 1; $match_errs++ }
+       else { $rsp .= "FAILED (expected $sum, got $digest)\n"; $err = 1; $match_errs++ }
        print $rsp unless ($status || ($quiet && $isOK));
    }
    close(FH);

それから:

$ echo '760382d5e8cdc5d0d079e8f754bce1136fbe1473be24bb885669b0e38fc56aa3  a' | ./shasum -a 256 -c
a: FAILED (expected 760382d5e8cdc5d0d079e8f754bce1136fbe1473be24bb885669b0e38fc56aa3, got 3a1edb0672af06bc4712da1fcc00a09326e550d3f503ca41bf59d259f46afdc9)

おすすめ記事