【Perl用省リソースMD5ルーチン】
2004/10/12 (c)深鈴由羽,(c)MisuzuWorkshop
・開発背景
通常、PerlでMD5ダイジェストを求める場合は外部コマンドのmd5やopensslを呼ぶか、内部で処理したければDigest::MD5を呼ぶ事になると思います。
このプログラムは、ワンファイル配付をしたい場合に有効な省リソースルーチンです。
事の発端はDynamicDNS更新プログラムでMD5が必要になり、試験段階ではmd5コマンドを呼んでいましたが$digest=`md5
-s $password`みたいな感じで使っていたので運悪くそのタイミングでプロセスリストを見られるとバレるわけです。
常套手段であるDigest::MD5を使いたく無かったのは、md5.pmの再配布条件を調べるのが面倒だったり、組み込み方法がややこしく感じたからです(動作させるPerl環境にmd5.pmが存在すればそちらを使い、無ければ添付pmを使わせる)。
・組込方法
プログラム本体にmd5.plの中身をコピペして下さい。
常識的な範囲内で、どこに置いても構いません。
・呼び出し方と戻り値
ルーチン先頭にも簡単に書いてありますが、非常に簡単でシンプルです。
return=&md5sum(strings)
stringsにはMD5ダイジェストを求めようとする文字列を入れて下さい。配列は受け付けませんので、その場合はjoinしてから渡して下さい。
returnには、32バイトのASCII化16進数が戻ってきます。
・配付条件
・当該プログラムの組込、再配付、利用は一切の制限を伴わない
・同、本体の改変等は制限しないが著作者表示行は変更してはならない
・同、作成者、関係者及び配付者はいかなる責任も負わない
・制限事項
32bit環境で開発している為、64bit以上の環境でどう振舞うかは予想出来ませんのでその場合はテストしてから組み込んで下さい。一応、それなりの対策はしているつもりですが。
Perlで計算している都合上、C言語等のコンパイル言語から見ると著しく遅いので巨大な元データは入力しないで下さい。パスワード程度の小さな処理を想定しています。もし大きなデータを処理する場合は一旦ファイルに書き出し、md5やopensslを利用して下さい。
・ダウンロード
md5.pl(サブルーチンのみ)
・おまけ
おまけとして、実行可能なファイルも置いておきます。
実行フラグを付けて、./digest.pl stringsとして実行して下さい。
尚、比較の為に外部のmd5コマンドを呼んでいるので見つからない場合はエラーになります。
digest.pl(実行形式)