名前¶
Digest:: - メッセージ・ダイジェストを計算するモジュール
概要¶
$md2 = Digest->MD2;
$md5 = Digest->MD5;
$sha1 = Digest->SHA1;
$sha1 = Digest->new("SHA-1");
$hmac = Digest->HMAC_MD5($key);
説明¶
Digest::
モジュールは、メッセージと呼ばれる、あるデータの"フィンガープリント" または"ハッシュ"とも呼ばれるダイジェストを計算します。ダイジェストは(通常は)、 いくつかの小さい/固定長の文字列です。ダイジェストの実際の大きさは使われる アルゴリズムに依存します。メッセージは単なる任意のバイト並びです。
ダイジェスト・アルゴリズムの重要な属性は、もしメッセージが何らかの方法で 変更されるとダイジェストも変わるであろうということです。もう1つの属性は ダイジェスト関数は一方向の関数であることです。つまり与えられたダイジェストに 対応するメッセージを見分けるのが困難でなければなりません。アルゴリズムは、 どれくらい効率的に計算できるかと同時に、どれくらい"変わりそうか"そして、 どらくらい"困難"かによって違います。
すべてのDigest::
モジュールは同じプログラミング・インターフェースを提供します。 使うのが簡単な関数インターフェースと、任意の長さのメッセージを扱うことができ ファイルから直接読み込むことができるオブジェクト指向インタフェースがあります。
ダイジェストは以下の3つの形式で提供されます:
- binary
-
これは最もコンパクトな形式ですが、印刷や任意のデータを扱うことができない場所に 埋め込むのには適していません。
- hex
-
(小文字の)16進数による2倍の長さの文字列
- base64
-
可搬性のある印刷可能な文字列。これは後ろについた詰め文字が削除されたダイジェストの base64エンコードされた形式です。文字列はバイナリーバージョンよりも30%ほど長くなります。 MIME::Base64がこのエンコーディングについて、さらに詳しく説明しています。
関数インターフェースは、単純にアルゴリズムと同じ名前を持った、インポートできる関数です。 関数は引数としてメッセージを取り、ダイジェストを返します。例えば:
use Digest::MD5 qw(md5);
$digest = md5($message);
名前に"_hex"や"_base64"が付いた関数のバージョンもあります。これは指定された形式で ダイジェストを返します。
OOインターフェース¶
以下のメソッドは全てのDigest::
モジュールで利用できます:
- $ctx = Digest->XXX($arg,...)
- $ctx = Digest->new(XXX => $arg,...)
- $ctx = Digest::XXX->new($arg,...)
-
コンストラクタは、メッセージ・ダイジェスト・アルゴリズムの状態をカプセル化した 何らかのオブジェクトを返します。最終的にオブジェクトにはダイジェストを依頼する データを追加することができます。"XXX"はもちろん利用したいダイジェスト・アルゴリズムの 適切な名前によって置き換えなければなりません。
最初の2つの形式は簡単な書き方のバリエーションで、最初に使われると適切なモジュールを 自動的にロードします。2番目の形式はperlの識別子としては正しくない文字が入っている アルゴリズム名、例えば"SHA-1"を使うことを可能にします:
もしnew()がインスタンス・メソッドとして呼ばれると(つまり $ctx->new)、それは新しく 作られたオブジェクトの状態にオブジェクトの状態をリセットするだけです。この場合、 新しいオブジェクトは作らず、そして戻り値はそのオブジェックト(つまり $ctx)への リファレンスになります。
- $ctx->reset
-
$ctx->newの単なる別名です。
- $ctx->add($data,...)
-
引数として与えられた$dataが、ダイジェストを計算するメッセージに追加されます。 戻り値は$ctxオブジェクトそのものです。
- $ctx->addfile($io_handle)
-
$io_handleはEOFまで読み込まれ、その内容がダイジェストを計算するメッセージに 追加されます。戻り値は$ctxオブジェクトそのものです。
- $ctx->digest
-
そのメッセージのバイナリ・ダイジェストを返します。
digest
処理が実質には破壊的で、一度だけの読み込み処理であるということに 注意してください。一度行われると、$ctxオブジェクトは自動的にリセット
され、 他のダイジェスト値を計算するために使うことができます。 - $ctx->hexdigest
-
$ctx->digestと同じ。ただしダイジェストを16進形式で返します。
- $ctx->b64digest
-
$ctx->digestと同じ。ただしダイジェストをbase64エンコードされた文字列で返します。
参考資料¶
Digest::MD5, Digest::SHA1, Digest::HMAC, Digest::MD2
作者¶
Gisle Aas <[email protected]>
Digest::
インターフェースは、元はNeil Wintonによって、 彼のMD5
モジュールのために開発されたインタフェースをベースにしています。