SHA1の値を取得する - Perl

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

それぞれの関数は実行結果からも分かる通り、次のような処理を行う。

  1. sha1バイナリの値で返却(20byte)
  2. sha1_hex16進数へ変換後に返却(40byte)
  3. 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の脆弱化