itproに川合 孝典さんによるperl入門が掲載されていました。
http://itpro.nikkeibp.co.jp/article/COLUMN/20080528/304551/
Digest::MD5をinstallしたことはありましたが、これまであまり利用していなかったので、これを試してみます。
perl入門の記事では Digest::Perl::MD5 が紹介されていましたが、私の周りではDigest::MD5の方をよく見かけるので、今回はDigest::MD5を使用します。
一方向暗号とは
一方向暗号では暗号化したものを元の内容には戻せません。
一方向暗号化にはMD5やSHA1といったhash関数があり、これらは任意の長さのデータを16バイト(md5),20バイト(sha)でdigest(要約)を作成します。
当然、digestから元の値を類推できません。
Digest::MD5 を使う
Digest::MD5 の使用方法はcpan等にあるドキュメントを読めば十分だと思います。
http://search.cpan.org/search?query=Digest%3A%3AMD5&mode=all
文字列の16進digestを取得するには次のように行い、例えば、これはpasswdの暗号化に使用します。
#!perl #in cygwin use strict; use warnings; use Digest::MD5; my $ctx = Digest::MD5->new; my $str = 'A' x 1024; $ctx->add($str); print $ctx->hexdigest,"\n";
$ test.pl d47b127bc2de2d687ddc82dac354c415
同様にfileの16進digestを取得するには次のように行い、例えばダウンロードしたファイルの比較に使用します。
#!perl #in cygwin use strict; use warnings; use Digest::MD5; sub main { my ($file_path) = @_; my $ctx = Digest::MD5->new; open my $fh, "<$file_path"; $ctx->addfile($fh); print $ctx->hexdigest,"\n"; close($fh); } main(@ARGV);
$ ./foo2.pl foo.txt e7be80991023d61a0f40849d065962e6