🔒 Как проверить контрольную сумму SHA с помощью bash скрипта

Проверим контрольную сумму SHA с помощью скрипта.

Проблема

Во многих случаях контрольная сумма SHA предоставляется как есть, файл контрольной суммы содержит только контрольную сумму.

ls -l
total 2728
-rw-rw-r-- 1 milosz milosz 2788190 Feb  7 16:15 starship-x86_64-unknown-linux-gnu.tar.gz
-rw-rw-r-- 1 milosz milosz      65 Feb 23 01:34 starship-x86_64-unknown-linux-gnu.tar.gz.sha256

cat starship-x86_64-unknown-linux-gnu.tar.gz.sha256
d99fda409e1be96b07a8687bdbb1162e75c4a3c4301e7bf853dfd01dcb34a33

Это создает проблему для стандартных служб.

shasum --check starship-x86_64-unknown-linux-gnu.tar.gz.sha256
shasum: starship-x86_64-unknown-linux-gnu.tar.gz.sha256: no properly formatted SHA checksum lines found

Поскольку они ожидают имя файла, связанное с заданной контрольной суммой, используя формат GNU или BSD.

shasum --algorithm 1 starship-x86_64-unknown-linux-gnu.tar.gz | tee starship-x86_64-unknown-linux-gnu.tar.gz.sha1
3abb968ef9afc057cd51af32f38fe398701421e1  starship-x86_64-unknown-linux-gnu.tar.gz
shasum --tag --algorithm 1 starship-x86_64-unknown-linux-gnu.tar.gz | tee starship-x86_64-unknown-linux-gnu.tar.gz.sha1
SHA1 (starship-x86_64-unknown-linux-gnu.tar.gz) = 3abb968ef9afc057cd51af32f38fe398701421e1

Такая контрольная сумма может быть проверена без каких-либо проблем.

shasum --check starship-x86_64-unknown-linux-gnu.tar.gz.sha1
starship-x86_64-unknown-linux-gnu.tar.gz: OK

Решение

Решение заключается в создании простого скрипта оболочки, который будет выполнять дополнительные шаги для проверки контрольной суммы SHA.

#!/bin/bash

# verify file checksum from a file



# checksum algorithms

algorithms=( 1 224 256 384 512 512224 512256 )



# file to check

file="$1"



# execute when there is one parameter

if [ "$#" -eq "1" ]; then

  # check if file exist

  if [ -f "${file}" ]; then

    # find checksum file

    for algorithm in "${algorithms[@]}"; do

      if [ -f "${file}.sha${algorithm}" ]; then

        echo "Found SHA${algorithm} checksum"

        words="$(wc -w < ${file}.sha${algorithm})"

        # verify checksum and pass the exit code

        if [ "$words" == "1" ]; then

          shasum --algorithm $algorithm --check <(echo $(cat ${file}.sha${algorithm})  $file)

          exit $?

        elif [ "$words" == "2" ] || [ "$words" == "4" ]; then

          shasum --algorithm $algorithm --check ${file}.sha${algorithm}

          exit $?

        fi

      fi

    done

  fi

fi

Он автоматически проверит контрольную сумму SHA (в стиле GNU или BSD).

chkfile starship-x86_64-unknown-linux-gnu.tar.gz
Found SHA1 checksum
starship-x86_64-unknown-linux-gnu.tar.gz: OK

Он также будет работать с файлом, содержащим только контрольную сумму.

chkfile starship-x86_64-unknown-linux-gnu.tar.gz
Found SHA256 checksum
starship-x86_64-unknown-linux-gnu.tar.gz: OK

Вы будете проинформированы в случае возникновения проблем.

chkfile starship-x86_64-unknown-linux-gnu.tar.gz
Found SHA256 checksum
starship-x86_64-unknown-linux-gnu.tar.gz: FAILED
shasum: WARNING: 1 computed checksum did NOT match

Вы можете немного расширить его, чтобы возвращать различные коды выхода, когда файл или его контрольная сумма не найдены.

см. также:



2023-05-10T09:03:46
Скрипты