TOP書籍連動> メッセージダイジェスト関数の実装




まるごと PostgreSQL!
商用データベースに匹敵するWebシステム構築手法

第10回:メッセージダイジェスト関数の実装

著者:大垣靖男(OHGAKI, Yasuo)   2005/5/23
1   2  次のページ
メッセージダイジェスト関数の実装

   それでは、実際にメッセージダイジェスト関数の実装の仕方を解説しましょう。リスト13は、実際に実装するためのPHPスクリプトです。
リスト13:メッセージダイジェスト関数の実装
<?php
// digest.php

/** メッセージダイジェストを保存する変数名*/
define('HASH_NAME','m');
/** メッセージダイジェスト生成の秘密文字列*/
define('MAGIC','&%21q234lkajsdfbjueA)234%&$% ');
/** メッセージダイジェストの有効範囲設定*/
define('MAGIC_LIFE_ANY', 0);
define('MAGIC_LIFE_SCRIPT', 1);
define('MAGIC_LIFE_USER', 2);
define('MAGIC_LIFE_SESSION',4);


// {{{ init_hash()
/**
* 配列にメッセージダイジェストの値を追加
*
* @param array $values array(key=>vlaue)
* @param array $values_protected array(vlaue)
* @param int $magic_life See magic().
* @return array
*/
function init_hash($values, $values_protected = null, $magic_life ⇒
= MAGIC_LIFE_ANY)
{
assert(is_array($values));
if ($values_protected)
$vals = $values_protected;
else
$vals = array_keys($values);
$str = '';
foreach($vals as $k)
{
if ($k === HASH_NAME)
continue; // skip if there is hash
$str .= $k.$values[$k];
}
//echo $str;
$values[HASH_NAME] =md5($str.(magic($magic_life)));
return $values;
}
// }}}

// {{{ check_hash()
/**
* 配列と配列に埋め込まれたメッセージダイジェスト値を確認
*
* @param array $values array(key=>vlaue)
* @param array $values_protected array(vlaue)
* @param int $magic_life See magic().
* @return bool TRUE for ok, FALSE for NG
*/

function check_hash($values, $values_protected = null, $magic_life ⇒
= MAGIC_LIFE_ANY)
{
assert(is_array($values));
if (!isset($values[HASH_NAME])) {
return false;
}
if ($values_protected)
$vals = $values_protected;
else
$vals = array_keys($values);

$str = '';
foreach($vals as $k)
{
if ($k === HASH_NAME)
continue; // skip if there is hash
$str .= $k.$values[$k];
}
$hash = md5($str.(magic($magic_life)));
//echo $str;
if ($values[HASH_NAME] !== $hash) {
return false;
}
return true;
}
// }}}

// {{{ magic()
/**
* メッセージダイジェスト用の秘密の文字列の生成。
* 特定のセッション、ユーザー、スクリプト用に秘密も文字列を生成。
*
* @param integer $life magic's life time (See constant MAGIC_*)
* @return string Magic string
*/

function magic($life = MAGIC_LIFE_ANY)
{
assert(is_integer($life));
$magic = MAGIC; // static magic string
if ($life & MAGIC_LIFE_SESSION)
$magic .= session_id();
if (($life & MAGIC_LIFE_USER) && is_object($_SESSION['auth']))
$magic .= $_SESSION['auth']->uid; // ユーザー名など
if ($life & MAGIC_LIFE_SCRIPT)
$magic .= $_SERVER['PHP_SELF'];
return $magic;
}
// }}}

?>
1   2  次のページ

書籍紹介
まるごと PostgreSQL! Vol.1
まるごと PostgreSQL! Vol.1 日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。
発売日:2004/12/08発売
定価:\1,890(本体 \1,800+税)
大垣 靖男
著者プロフィール
大垣靖男(OHGAKI, Yasuo)
University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て、エレクトロニック・サービス・イニシアチブ有限会社を設立。Linuxはバージョン0.9xの黎明期から利用してるが、オープンソースシステム開発やコミュニティへの参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトのPostgreSQLモジュールのメンテナ、日本PostgreSQLユーザ会の四国地域での活動等を担当している。


この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。
ご意見、ご要望にお応えします! インプレスIT INSIDE

INDEX
第10回:メッセージダイジェスト関数の実装
メッセージダイジェスト関数の実装
  メッセージダイジェスト関数を利用するサンプル
商用データベースに匹敵するWebシステム構築手法
第1回 PostgreSQLの現状
第2回 Webシステムの高速化
第3回 アクセス分散の基礎とラウンドロビンDNS
第4回 アクセス分散とスケールアウトの条件
第5回 HTTPセッションの永続性確保
第6回 HTTPキャッシュと出力キャッシュ
第7回 クエリキャッシュとキャッシュの効果
第8回 HTTPキャッシュの効果
第9回 メッセージダイジェスト関数
第10回 メッセージダイジェスト関数の実装

Think IT 過去人気記事

注目おすすめ情報

Think IT人気ライター BEST 5

IT製品/サービス資料ダウンロード
    おすすめのホワイトペーパー情報を準備中です