スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

ファイルをインターネットからダウンロードやアップロードしたときに、ファイルが壊れていて、開けない、という場面に遭遇したことはありますでしょうか?データ転送はしばしば失敗し、データが壊れてしまうことがあります。

データが壊れていないか確認する方法として、「ファイルのチェックサムを計算しておいて、転送後にチェックサムを再計算して確認する」が考えられます。

チェックサムを計算する方法として、いくつかのコマンドがあります。今すぐコマンドだけ知りたい方向けに、いくつか例を挙げます。

sha256sum コマンドの例。
$ sha256sum /etc/ssh/* > /tmp/ssh.txt
$ sha256sum -c /tmp/ssh.txt
1つ目がチェックサムの作成です。
2つ目がチェックサムの確認です。

それでは、もう少し詳しく説明しましょう。

チェックサムのコマンド


チェックサムのコマンドはいろいろあります。時代にあったチェックサムコマンドを使えばよいと思います。チェックサムコマンドの中には、SHA-256 や SHA-1, MD5 といった一方向ハッシュを用いるものがあります。

今の時代なら MD5 や SHA-1 よりは、 SHA-512, SHA-256 あたりが良いでしょう。

お使いのOSによって、チェックサムを計算するコマンドが異なってきます。

使っているLinux/Unixにどのようなチェックサムコマンドがあるかは、 /usr/bin を確認すれば、わかります。
ls /usr/bin/*sum

おそらく、Linux なら以下のチェックサムを計算するコマンドがあるのではないでしょうか。
  • sha512sum
  • sha384sum
  • sha256sum
  • sha224sum
  • sha1sum
  • md5sum
  • chksum
  • sum
FreeBSD の場合だと sha*sum や md5sum のコマンドは標準ではありません。

また、OpenSSLコマンドを用いることもできます。
OpenSSL コマンドであれば
  • Linux
  • FreeBSD
  • Mac
  • Windows
    • 例えば WSL のLinuxの中 と幅広く使うことができます。

手順


チェックサムのデータの作成と確認は、以下のような手順となります。

  • チェックサムを計算したいデータを用意したら、チェックサムを計算します。
  • チェックサムの計算結果は適当なファイル(チェックサムのファイル)に保存しておきます(。
  • データとチェックサムのファイルを転送します。
  • データの転送が終わったら、データの転送先で、データとチェックサムファイルを使用して、データが正しく転送できたか確認します。

チェックサムの作成


さて、チェックサムを作成してみましょう。

/bin/ls コマンドのチェックサムを sha256sum で計算してみましょう。
$ sha256sum /bin/ls
fea4ce7047b56e5e03767eb6dae03676936e56160f5022374a3422fd0c06a8bc  /bin/ls

それでは、チェックサムの計算結果を /tmp/ls.txt に保存しておきます。
$ sha256sum /bin/ls >/tmp/ls.txt

チェックサムの確認


「チェックサムの作成」で作成した /tmp/ls.txt を使って、チェックサムの確認をしてみましょう。 sha256sum の -c オプションを使って、チェックサムのファイルを指定します。 sha256sum はチェックサムのファイルを読み込み、指定されたファイルのチェックサムを計算し、同じ結果になるかを確認します。

$ sha256sum -c /tmp/ls.txt
/bin/ls: OK

OpenSSLコマンドでチェックサムを計算する


openssl の dgst コマンドで、チェックサムを計算できます。

実行例を以下に示します。
openssl dgst -sha256 /tmp/a

sha-256, md5 であれば、以下の通りです。
openssl dgst -sha512 /tmp/a
openssl dgst -md5 /tmp/a

チェックする方法がないので、適当なファイルにリダイレクトして、チェックサムのファイルを diff すればよいと考えられます。

server1$ openssl dgst -sha256 /tmp/a > server1.txt
server2$ openssl dgst -sha256 /tmp/a > server2.txt
server2$ diff server1.txt server2.txt

FreeBSDのハッシュ系コマンド


Linux 系のハッシュ計算のコマンドは、以下のフォーマットです。
$ md5sum /tmp/a
60b725f10c9c85c70d97880dfe8191b3  /tmp/a
$ sha256sum /tmp/a
87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7  /tmp/a

一方で、FreeBSDのハッシュ計算のコマンドは、以下のフォーマットです。
$ md5  /tmp/a
MD5 (/tmp/a) = 14758f1afd44c09b7992073ccf00b43d

つまり、Linux と FreeBSD のハッシュ系コマンドの出力フォーマットが異なります。
こうなると、比較をどうやってやるか?という悩みが出てきます。

FreeBSD の md5 や sha256 などのコマンドには、 -r オプションがあり、出力を逆にすることができます。以下に例を示します。
$ md5  /tmp/a
MD5 (/tmp/a) = 14758f1afd44c09b7992073ccf00b43d
$ md5 -r /tmp/a
14758f1afd44c09b7992073ccf00b43d /tmp/a

このように、出力を逆にすることができます。
md5 や sha256 コマンドには、 Linux の sha256sum のようなチェックオプションがないため、目視かdiffコマンドに任せる、といった方法で、ハッシュ値を確認する必要があります。

まとめ

  • OpenSSL コマンドなら環境に影響を受けずに汎用的に使えるが、チェックオプションがない。
  • FreeBSD の md5 や sha256 は、 -r オプションで Linux の *sum 系のコマンドと同じフォーマットで出力できる。
  • Linux 系なら sha256sum などを使って、チェックサムを計算し、 sha256sum -c hash.txt でチェックサムをチェックできる。

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー