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

🔒 Как проверить контрольную сумму 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

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

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий