第10回:メッセージダイジェスト関数の実装 (1/2)
 |
|
| 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']; r eturn $magic; } // }}}
?>
|
 |
1 2 次のページ
|
書籍紹介 まるごと 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ユーザ会の四国地域での活動等を担当している。
|
|
 |
|
 |
|