読者です 読者をやめる 読者になる 読者になる

akimachoのはてなブログ

ICTとデザインのためのブログ

妥当なファイルか調べるチェックサム(ハッシュ値)とは

はじめに

チェックサムについてメモ。

導入

『独習Linux専科』の最初のほうに、fedora17のダウンロードの説明があります。

そこで「チェックサム」について触れていたので、ちょっと調べてみました。

チェックサム

下のWebページに行くと、「Fedora-17-x86_64-CHECKSUM」というファイルがあります。

http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/17/Fedora/x86_64/iso/

そこのリンクを辿ると、意味不明な文字列が載っています。これが、チェックサムハッシュ値)です。

(↓は一部引用)

c05d7d10e17d49057c714ae0f08d442d3bde47dd28db587cfc5c4ce310ccd705 *Fedora-17-x86_64-DVD.iso

この文字列が何のためにあるのかというと、ファイルが壊れていないか、改ざんされていないか調べるために使われます。

使う側の気持ちとしては、「ここに壊れてないファイルとそのチェックサムを置いておきますね。各自ダウンロードしたら、そのチェックサムを調べて壊れてないか調べて下さい」ってことなんでしょうね。

自分でチェックサムを計算してみる

OS問わずチェックサムを計算するツールはあると思いますが、自分でプログラムを書いてみます。

作るプログラムは、コマンドライン引数で与えられたファイル名のMD5チェックサムを計算するというものです。

各言語でチェックサムを調べるライブラリは揃っていますが、PerlではDigest::MD5というモジュールを使えば簡単にMD5チェックサムを計算することができます。

#!/usr/bin/env perl
# checksum.pl
use strict;
use warnings;
use Digest::MD5 qw/md5_hex/;
my $file = $ARGV[0];
open my $fh, '<', $file or die "$!";
binmode($fh) # Windowsの場合
my $value;
while (my $line = <$fh>) {
  $value .= $line;
}
close $fh;
print md5_hex($value), "\n";

apacheソースコードをダウンロードして、チェックサムを計算してみましょう。

http://httpd.apache.org/download.cgi

httpd-2.4.12.tar.gzのMD5チェックサムは、

http://www.apache.org/dist/httpd/httpd-2.4.12.tar.gz.md5

によれば、「ec8676a7fe62433883868b8341da6734」です。ダウンロードしたファイルでもこの値になるならば、ファイルが壊れていないということになります。

作ったプログラムを実行してみます。

$ perl checksum.pl
ec8676a7fe62433883868b8341da6734

同じになったので、ファイルが妥当であることが分かりました。

参考にしたページ

http://www.atmarkit.co.jp/ait/articles/1106/17/news138.html

おわりに

チェックサムで使われているMD5アルゴリズムがどんなものなのか気になったので、調べたいと思ってます。