パスワード暗号化(ハッシュ化)生成サンプル

.htaccess でベーシック認証を利用する際にパスワードファイル(.htpasswd)に記述する暗号化されたパスワードを生成するサンプルページです。使用しているコードも掲載しています。

更新日:2023年03月20日

作成日:2019年05月10日

パスワード暗号化

.htaccess でベーシック認証を利用する場合、パスワードは暗号化(ハッシュ化)する必要があります。

パスワードを記述する .htpasswd パスワードファイルには、以下のような書式で暗号化(ハッシュ化)したパスワードを記述します。

  • ユーザー名(ID)とパスワードは「:(コロン)」で区切ります。
  • ユーザー名(ID)とパスワードは、1行に1アカウントずつ記述します。
usr1:X.pQAhaJ00pZk
#ユーザー名(usr1)とパスワード(pw1) 

関連ページ:

パスワードハッシュ生成サンプル

以下は PHP の crypt() 関数を使って暗号化されたパスワードハッシュを生成するサンプルです。

パスワードハッシュ生成フォーム crypt()

ユーザー名(ID)
パスワード

ユーザー名(ID)とパスワード(コロン: 区切り)

user name (id):password

以下が上記パスワード暗号化生成のコードです。

<div class="wrapper">
  <h4>パスワード生成フォーム crypt() </h4>
  <?php
  $id = '';
  $pass = '';
  $_POST = checkInput( $_POST );
  if ( isset( $_POST[ 'id' ] ) ) {
    $id = $_POST[ 'id' ];
  }
  if ( isset( $_POST[ 'pass' ] ) ) {
    $pass = $_POST[ 'pass' ];
  }
  if ( $id == "" ) {
    $pwd = "";
  } else {
    $pwd = crypt( $pass, substr( crypt( $id, 'xz' ), -2 ) );
  }

  function checkInput( $var ) {
    if ( is_array( $var ) ) {
      return array_map( 'checkInput', $var );
    } else {
      /* PHP 7.4.x で get_magic_quotes_gpc が非推奨になったので削除
      if ( get_magic_quotes_gpc() ) { //php.iniでmagic_quotes_gpcが「on」の場合の対策
        $var = stripslashes( $var );
      }*/
      if ( preg_match( '/\0/', $var ) ) { //NULLバイト攻撃対策
        die( '不正な入力です。' );
      }
      if ( !mb_check_encoding( $var, 'UTF-8' ) ) { //文字エンコードのチェック
        die( '不正な入力です。' );
      }
      return $var;
    }
  }
  ?>
  <div id="form_wrapper">
    <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); ?>">
      ユーザー名(ID)<input type="text" name="id" class="form-control" placeholder="user name (id) *必須" value="<?php echo htmlspecialchars($id, ENT_QUOTES, 'UTF-8'); ?>" size="50"/> <br/> パスワード <input type="text" name="pass" class="form-control" placeholder="password" value="<?php echo htmlspecialchars($pass, ENT_QUOTES, 'UTF-8'); ?>" size="50"/><br/>
      <button type="submit" class="btn btn-primary">パスワード生成</button>
    </form>
  </div>
  <p class="margin_top30">ユーザー名(ID)とパスワード(コロン: 区切り)</p>
  <p class="idpw">
    <?php echo htmlspecialchars($id ? $id: "user name (id)", ENT_QUOTES, 'UTF-8') . ':' .htmlspecialchars($pwd ? $pwd: "password", ENT_QUOTES, 'UTF-8'); ?>
  </p>    

パスワードハッシュ生成フォーム password_hash()

以下は PHP の password_hash() 関数を使って暗号化されたパスワードハッシュを生成するサンプルです。

ユーザー名(ID)
パスワード

ユーザー名(ID)とパスワード(コロン: 区切り)

user name (id):password

以下が上記パスワード暗号化生成のコードです。

<div class="wrapper">
  <h4>パスワード生成フォーム  password_hash() </h4>
  <p>以下は PHP の password_hash() 関数を使って暗号化されたパスワードを生成するサンプルです。</p>
  <?php
  $id2 = '';
  $pass2 = '';
  $_POST = checkInput( $_POST );
  if ( isset( $_POST[ 'id2' ] ) ) {
    $id2 = $_POST[ 'id2' ];
  }
  if ( isset( $_POST[ 'pass2' ] ) ) {
    $pass2 = $_POST[ 'pass2' ];
  }
  if ( $id2 == "" ) {
    $pwd2 = "";
  } else {
    $pwd2 = password_hash( $pass2, PASSWORD_BCRYPT );
  }
  ?>
  <div id="form_wrapper">
    <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'); ?>">
      ユーザー名(ID)<input type="text" name="id2" class="form-control" placeholder="user name (id) *必須" value="<?php echo htmlspecialchars($id2, ENT_QUOTES, 'UTF-8'); ?>" size="50"/> <br/> パスワード <input type="text" name="pass2" class="form-control" placeholder="password" value="<?php echo htmlspecialchars($pass2, ENT_QUOTES, 'UTF-8'); ?>" size="50"/><br/>
      <button type="submit" class="btn btn-primary">パスワード生成</button>
      <input type="hidden" name="scroll_top" value="" class="st">
    </form>
  </div>
  <p class="margin_top30">ユーザー名(ID)とパスワード(コロン: 区切り)</p>
  <p class="idpw">
    <?php echo htmlspecialchars($id2 ? $id2: "user name (id)", ENT_QUOTES, 'UTF-8') . ':' .htmlspecialchars($pwd2 ? $pwd2: "password", ENT_QUOTES, 'UTF-8'); ?>
  </p>