こんにちは、さるまりんです。
受け取ったファイルが正しいものであるかを検証するのに、ファイルの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
最後の0
をa
に変えています。
これで検証してみます。
$ 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
サーバーにアップロードする、もしくはダウンロードしてくる。何か起こって中途半端なものが取得されることもあります。何か変なものを誰かが置く可能性もあります。それが正しいものかを完璧ではないにしろチェックするのは大切なことかと思います。
コンピュータがいろいろやってくれますが、何も知らないのも怖いです。
ちょっとでも安全に使えるようにしていきたいです。
あ、何かあったわけではないですよ。慎重に、慎重に、です。
読んでくださってありがとうございました。
それではまた!