とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


perl:module_uniqid

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

perl:module_uniqid [2017/12/14 20:18]
perl:module_uniqid [2020/06/23 14:10] (現在)
行 1: 行 1:
 +====== 重複しないユニークなidを生成する - Perl ======
 +~~socialite~~
 +<note important>この記事は2006年10月05日に書かれたものです。</note>
  
 +ユーザーを識別するため、ファイルをサーバに保存するなど何らかの理由により重複しないIDを生成したい場合にはどうすれば良いだろうか?
 +
 +通常のCGIであれば、CGI::Sessionなどを用いる方法もあるが、次のようなコードを書くことでも実現できる。以下のコードを動かすには、Digest::SHA1モジュールがインストールされていることが必要である。
 +
 +===== サンプル =====
 +<code perl>
 +;#
 +;#セッションID
 +;#
 +
 +use Digest::SHA1 qw(sha1_hex);
 +
 +print genUniqID();
 +
 +#----------------------------------------------#
 +#■ユニークなIDを生成する
 +#----------------------------------------------#
 +sub genUniqID{
 +  my $seed = shift || 'seed-string';
 +  my $id = join(''
 +          , $ENV{'REMOTE_ADDR'}
 +          , $ENV{'HTTP_USER_AGENT'}
 +          , time
 +          , $$
 +          , rand(9999)
 +          , $seed
 +      );
 +
 +  return(sha1_hex($id));
 +}
 +</code>
 +
 +===== 実行結果 =====
 +<code>
 +274397ee11444b04327eef344517d332446de0ef
 +</code>
 +
 +ユーザーのIPアドレス、ブラウザ名(ユーザーエージェント)に加え時間、プロセスID、乱数、なにがしかの自由な文字列から構成されている。これらの文字列をそのまま連結してしまうと、セキュリティ的によろしくないため、不可逆な文字列に変換する。
 +
 +ここではSHA1と呼ばれる方法を用いているが、場合によってはMD5などおなじみの方法でもかまわない。ただMD5はとある脆弱性を抱えており、それをSHA1が解決していると言われているため、なるべくSHA1を使っておいた方が良いだろう。
 +
 +
 +CGI::Sessionが使いたいという場合は、こちらのページを参照されたい。
 +
 +  = CGI Session - CGIアプリケーションにおける持続的なデータのセッション : http://perldoc.jp/docs/modules/CGI-Session-3.11/Session.pod
 +
 +
 +===== 関連ページ =====
 +  = RFC 1321 (MD5) : http://www.faqs.org/rfcs/rfc1321.html
 +  = RFC 3174 (SHA1) : http://www.faqs.org/rfcs/rfc3174.html
 +
 +===== MD5の脆弱性について =====
 +
 +「MD5」安全性の項より
 +http://ja.wikipedia.org/wiki/MD5#.E5.AE.89.E5.85.A8.E6.80.A7
 +
 +> MD5、およびRIPEMDとよばれるハッシュ関数には理論的な弱点が存在することが明らかとなっている2004年8月、暗号の国際会議 CRYPTO (のランプセッション)にて、MD5のコリジョンを求めることができたという報告があった。理論的可能性として、MD5を用いて改竄されないことを確認する場合、あらかじめ正規のファイルと不正なファイルを用意しておき、正規のファイルを登録しておきながら、実際には不正なファイルに摩り替える攻撃がありえることを意味する。但し、実際にこの弱点を利用したクラッキングはまだ報告されていない。
 +
 +===== 関連書籍 =====
 +{{amazon>jp:477415864X}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00G9QIN58}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:4774150258}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:4797336803}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:4798139815}}
 +<html><p style="clear:both"></p></html>
 +
 +{{tag>CGI・Perl例文集 Perl SHA1 MD1 ハッシュ値  }}
 +~~socialite~~

関連ページ