MD5などよりも安全性の高いと言われるSHA1の値を取得したい。Digest::SHA1モジュールを用いればあっという間に実現できる。
Digest::SHA1モジュールには三種類の関数(メソッド)が用意されており、用途によって使い分けることができる。
サンプル
;# ;#SHA1の値を取得する ;# use strict; use Digest::SHA1 qw(sha1 sha1_hex sha1_base64); #-- 文字列設定 --# my $str = 'sushi geisha tenpura'; #-- SHA1関数を実行 --# print sha1($str), "\n"; print sha1_hex($str), "\n"; print sha1_base64($str), "\n";
実行結果
O??悖桿4+¥@奧J褓 864fa659a49bd823db65342b975c40d4fc4aea70 hk+mWaSb2CPbZTQrl1xA1PxK6nA
それぞれの関数は実行結果からも分かる通り、次のような処理を行う。
- sha1バイナリの値で返却(20byte)
- sha1_hex16進数へ変換後に返却(40byte)
- sha1_base64BASE64にエンコードし返却(27byte)
渡す値はもちろん何でもかまわない。バイナリや日本語なども当然通る。もし返ってきた値をファイル名などに使用したいなら、BASE64は '/' が含まれるためsha1_hexを用いることになる。なおバイト数は固定長のため変更することは出来ない。
これも考えれば当然のことであるが、三種類の値は表現方法が違うだけで全て同じである。疑問ならバイナリ値(sha1)を、自分で16進数へ変換してみれば分かるだろう。
ここには書かないがオブジェクト指向型のインターフェースも用意されており、そちらを用いるとファイルから直接SHA1値が取得できる。ドキュメントなどを参照されたし。
実用上はあまり問題ないと思われるが、SHA1はすでにハックされたという報告があるため、SHA2への移行を進められている。
2005年2月15日、世界的な暗号の権威であるBruce Schneier氏のBlog「Schneier on Security」で公表された「SHA-1 Broken」という情報は、驚きをもって世界中を駆け回った。現在、ハッシュ関数のデファクトスタンダードとして最も広く利用されているSHA-1に対して、中国・山東大学のXiaoyun Wang氏とHongbo Yu氏、セキュリティコンサルタントのYiqun Lisa Yin氏のチームが攻撃に成功したらしいというものであった。
第1回 すべてはここから始まった〜SHA-1の脆弱化