シェルスクリプトでファイルのMD5を計算、検証する方法

こんにちは、さるまりんです。

受け取ったファイルが正しいものであるかを検証するのに、ファイルのMD5ハッシュを比較して検証する方法があります。
これをシェルスクリプトでやってみたいと思います。

MD5ハッシュを計算する

MD5ハッシュの計算にはmd5sumコマンドを使います。
(macOSではmd5が用意されていますが、今回はLinuxを想定してmd5sumで)

md5sum [ファイル名]

で実行します。
この結果をファイルに格納します。

md5sum [ファイル名] > [ファイル名].md5

MD5ハッシュを検証する

ファイルに保存したMD5ハッシュを検証するにはmd5sumコマンドに-cオプションをつけて実行します
こんな感じです。

md5sum -c [ファイル名].md5

やってみよう

実際にやってみます。

こんなファイルがあります。

echo.sh

#!/bin/sh

echo "hi there!"

このMD5ハッシュを計算しファイルに保存します。

$ md5sum echo.sh > echo.sh.md5

ファイルに出力された結果は↓です
echo.sh.md5

48f610cbfc69ec0e62a0917b5a597060 echo.sh

検証してみます。

$ md5sum -c echo.sh.md5 
echo.sh: 完了

OKのようです。
echo.sh.md5ファイルをちょっとだけいじってみます。

echo.sh.md5

48f610cbfc69ec0e62a0917b5a59706a echo.sh

最後の0aに変えています。

これで検証してみます。

$ md5sum -c echo.sh.md5 
echo.sh: 失敗
md5sum: 警告: 1 個の計算したチェックサムが一致しませんでした

NGのようですね。

スクリプトに

これをシェルスクリプトにしてみます。

#!/bin/bash

# ファイルを指定
FILE="echo.sh"
MD5_FILE="${FILE}.md5"

# MD5ハッシュを計算して保存
md5sum $FILE > $MD5_FILE
echo "computed md5 hash and save in file ${MD5_FILE}"

# MD5ハッシュの検証
md5sum -c $MD5_FILE

# ↑の結果をもとにメッセージを出力
if [ $? -eq 0 ]; then
    echo "md5 hash matches"
else
    echo "md5 hash does not match"
fi

サーバーにアップロードする、もしくはダウンロードしてくる。何か起こって中途半端なものが取得されることもあります。何か変なものを誰かが置く可能性もあります。それが正しいものかを完璧ではないにしろチェックするのは大切なことかと思います。
コンピュータがいろいろやってくれますが、何も知らないのも怖いです。
ちょっとでも安全に使えるようにしていきたいです。
あ、何かあったわけではないですよ。慎重に、慎重に、です。

読んでくださってありがとうございました。
それではまた!