« エラーを表示する | メイン | 実行されたSQLを自動的にログへ記録する (PostgreSQL) »

カテゴリー:メッセージダイジェスト(ハッシュ) 

SHA1の値を取得する

このエントリーを含むはてなブックマーク  livedoorクリップ  SHA1の値を取得するをdel.icio.usに追加  SHA1の値を取得するをYahoo!ブックマークに追加  SHA1の値を取得するをニフティクリップに追加

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への移行を進められている。

第1回 すべてはここから始まった〜SHA-1の脆弱化
http://www.atmarkit.co.jp/fsecurity/rensai/crypt01/crypt01.html
2005年2月15日、世界的な暗号の権威であるBruce Schneier氏のBlog「Schneier on Security」で公表された「SHA-1 Broken」という情報は、驚きをもって世界中を駆け回った。現在、ハッシュ関数のデファクトスタンダードとして最も広く利用されているSHA-1に対して、中国・山東大学のXiaoyun Wang氏とHongbo Yu氏、セキュリティコンサルタントのYiqun Lisa Yin氏のチームが攻撃に成功したらしいというものであった。



トラックバック

このエントリーのトラックバックURL:
http://katsubemakito.net/mt/mt-tb.cgi/623



同カテゴリのエントリ




クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.