<?php $admin_password = "m9k7PZRgG8SAySmG"; $dataFile = dirname(__FILE__).'/data/userauth.data'; $iv_a = [177,108,37,2,26,148,178,3,72,100,27,156,62,231,205,83]; $enc_iv = implode('', array_map('chr', $iv_a)); $info = ""; $m = empty($_POST['m']) ? '' : $_POST['m']; if($m == 'add') $info = m_add(); if($m == 'get') $info = m_get(); function m_add() { $userId = empty($_POST['userId']) ? '' $_POST['userId']; $password = empty($_POST['password']) ? '' : $_POST['password']; $secret = empty($_POST['secret']) ? '' : $_POST['secret']; if ($userId == "" || $password == "" || $secret == ""){ return "ユーザー情報を正しく入力してください"; } putUserData([ 'userId'=>$userId, 'password'=>$password, 'secret'=>$secret]); return "保存しました"; } //ユーザーデータを追加 ---(*3) function putUserData($user){ global $dataFile, $enc_iv, $admin_password; $salt = base64_encode(openssl_random_pseudo_bytes(16)); $password = $user['password']; $user['password'] = hash('sha256', $password.$salt); $user['salt'] = $salt; $secret = openssl_encrypt( $user['secret'], 'aes-256-cbc', $password.$salt, 0, $enc_iv); $user['secret']= $secret; $data = getUserData(); $data[$user['userId']] = $user; $json = json_encode($data); print_r($data, $json); $enc = openssl_encrypt($json, 'aes-256-cbc', $admin_password, 0, $enc_iv); file_put_contents($dataFile, $enc); } // user transaction function m_get(){ global $enc_iv; $userId = empty($_POST['userId']) ? '' : $_POST['userId']; $password = empty($_POST['password']) ? '' : $_POST['password']; if ($userId == "")return "input is empty"; $data = getUserData(); if (!isset($data[$userId])) return "情報に誤りがあります"; $u = $data[$userId]; $salt = $u['salt']; $pw_hash = hash('sha256', $password.$salt); if ($u['password'] != $pw_hash) return "情報にあやまりがあります"; $secret_raw = $u['secret']; $secret = openssl_decrypt($secret_raw, "aes-256-cbc", $password.$salt, 0, $enc_iv); $secret_ = htmlentities($secret); return "<div class='read'><h3>ユーザー認証成功</h3>". "<ul><li>userId: $userId</li>". "<li>secret: $secret_</li></ul></div>"; } // get user data function getUserData(){ global $dataFile, $enc_iv, $admin_password; $data = []; if (file_exists($dataFile)){ $raw = file_get_contents($dataFile); $json = openssl_decrypt($raw, "aes-256-cbc", $admin_password, 0, $enc_iv); $data = json_decode($json, true); } return $data; } ?> <html><meta charset="utf-8"> <body><style> .read { background-color: #e0e0fc; padding: 10px; } form { margin-left: 10px; } </style> <?php echo $info; ?> <h2>ユーザーの参照</h2> <form method="post"> <input type="hidden" name="m" value="get"> userId:<br><input name="userId"><br> password:<br><input type="password" name="password"><br> <input type="submit" value="参照"> </form> <hr><h2>ユーザーの追加</h2> <form method="post"> <input type="hidden" name="m" value="add"> userId:<br><input name="userId"><br> password:<br><input type="password" name="password"><br> secret(秘密のメモ):<br><input name="secret"><br> <input type="submit" value="add"> </form> </body></html>