名前¶
Digest::MD5 - MD5アルゴリズムへのPerlインターフェース
概要¶
# 関数形式
use Digest::MD5 qw(md5 md5_hex md5_base64);
$digest = md5($data);
$digest = md5_hex($data);
$digest = md5_base64($data);
# OO 形式
use Digest::MD5;
$ctx = Digest::MD5->new;
$ctx->add($data);
$ctx->addfile(*FILE);
$digest = $ctx->digest;
$digest = $ctx->hexdigest;
$digest = $ctx->b64digest;
説明¶
Digest::MD5
モジュールはRSA Data Security Inc. MD5メッセージ・ダイジェスト アルゴリズムをPerlプログラムから使えるようにします。このアルゴリズムは任意の 長さのメッセージを入力として受け取り、その入力の128ビットの"フィンガープリント" あるいは"メッセージ・ダイジェスト"を出力として生成します。
Digest::MD5
モジュールは簡単に使えるように手続き的なインターフェースと、 任意の長さのメッセージを扱うことができ、ファイルから直接読み込むことができる オブジェクト指向のインターフェースを提供しています。
バイナリのダイジェストは16バイトの長さがあります。16進(hex)ダイジェストは 32文字の長さになります。base64ダイジェクトは22文字になります。
関数¶
以下の関数をDigest::MD5
モジュールからエクスポートすることができます。 デフォルトでは何もエクスポートされません。
- md5($data,...)
-
この関数はすべての引数を結合し、その"メッセージ"のMD5ダイジェストを計算し、 それをバイナリ形式で返します。
- md5_hex($data,...)
-
md5()と同じ。ただしダイジェストを16進形式で返します。
- md5_base64($data,...)
-
md5()と同じ。ただしダイジェストをbase64にエンコードされた形式で返します。
返されるbase64エンコードされた文字列には、長さが4バイト倍数になるように 埋め草がつけられるということはありません。他のbase64エンコードされた md5ダイジェストとの互換性が欲しければ、その結果に文字列"=="を追加したい かもしれません。
メソッド¶
以下のメソッドを利用することができます:
- $md5 = Digest::MD5->new
-
コンストラクタは、MD5メッセージ・ダイジェスト・アルゴリズムの状態を カプセル化した新しい
Digest::MD5
オブジェクトを返します。 Digestで説明されているメソッドを使ってオブジェクトに、最終的には ダイジェストを依頼するデータを追加することができます。コンストラクタはインスタンス・メソッドとして呼ばれると(つまり $md5->new)、 新しく作られたオブジェクトの状態へオブジェクトの状態をリセットするだけです。 この場合、新しいオブジェクトは作られません。
- $md5->reset
-
$md5->newの単なる別名です。
- $md5->add($data,...)
-
引数として与えられた$dataが、ダイジェストを計算するメッセージに追加されます。戻り値は$md5オブジェクトそのものです。
The $data provided as argument are appended to the message we calculate the digest for. The return value is the $md5 object itself.
- $md5->addfile($io_handle)
-
$io_handleはEOFまで読み込まれ、その内容がダイジェストを計算する メッセージに追加されます。戻り値は$md5オブジェクトそのものです。
ほとんどの場合、$io_handleがbinmode()であるよう、確実に設定したいと 思います。
- $md5->digest
-
そのメッセージのバイナリ・ダイジェストを返します。
digest
処理が実際には破壊的で、一度の読み込みの処理であるということに 注意してください。一度行われると、Digest::MD5
オブジェクトは自動的にリセット
し、他のダイジェスト値を計算するために使うことができます。 - $md5->hexdigest
-
$md5->digestと同じ。ただしダイジェストを16進形式で返します。
- $md5->b64digest
-
$md5->digestと同じ。ただしダイジェストをbase64エンコードされた文字列で返します。
返されるbase64エンコードされた文字列には、長さが4バイト倍数になるように 埋め草がつけられるということはありません。他のbase64エンコードされた md5ダイジェストとの互換性が欲しければ、その結果に文字列"=="を追加したい かもしれません。
使用例¶
このライブラリを使う最も簡単な方法は、md5_hex()関数(またはその類)を インポートすることです:
use Digest::MD5 qw(md5_hex);
print "Digest is ", md5_hex("foobarbaz"), "\n";
上記の例は以下のメッセージを出力します
Digest is 6df23dc03f9b54cc38a0fc1483df6e21
その実装が正しく動いていればこのようになります。同じチェックサムは OO形式でも同様に計算することができます:
use Digest::MD5;
$md5 = Digest::MD5->new;
$md5->add('foo', 'bar');
$md5->add('baz');
$digest = $md5->hexdigest;
print "Digest is $digest\n";
OO形式では、メッセージを任意に分けることができます。このため、 もはやメモリ上でメッセージ全体のための空間を持つことによる制限を受けません。 つまりどんな大きさのメッセージも扱うことができます。
これはファイルのチェックサムを計算するときに便利です:
use Digest::MD5;
my $file = shift || "/etc/passwd";
open(FILE, $file) or die "Can't open '$file': $!";
binmode(FILE);
$md5 = Digest::MD5->new;
while (<FILE>) {
$md5->add($_);
}
close(FILE);
print $md5->b64digest, " $file\n";
あるいはより効率のよいファイルの読込のため、組込みのaddfileメソッドを 使うことができます:
use Digest::MD5;
my $file = shift || "/etc/passwd";
open(FILE, $file) or die "Can't open '$file': $!";
binmode(FILE);
print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\n";
参考資料¶
Digest, Digest::MD2, Digest::SHA1, Digest::HMAC
RFC 1321
著作権(COPYRIGHT)¶
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Copyright 1998-2002 Gisle Aas.
Copyright 1995-1996 Neil Winton.
Copyright 1991-1992 RSA Data Security, Inc.
The MD5 algorithm is defined in RFC 1321. The basic C code implementing the algorithm is derived from that in the RFC and is covered by the following copyright:
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved.
License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function.
License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this documentation and/or software.
This copyright does not prohibit distribution of any version of Perl containing this extension under the terms of the GNU or Artistic licenses.
作者¶
The original MD5 interface was written by Neil Winton ([email protected]
).
This release was made by Gisle Aas <[email protected]>