2

ユーザーのパスワードを保存するための最良の方法を探していましたが、セキュリティにはあまり興味がないので、Googleを使用して暗号化などに関する多くの情報を見つけました。

インターネット上のブログやサイトで入手できるスニペットを使用するのは好きではなく、独自のソリューションを作成したいので、ハッシュを作成する関数と「ハッシュ」をチェックする関数の2つの関数を開発することになりました。パスワード。

自分が正しくやっているのか、それとも問題が増えているだけなのかわからないので、以下の関数を見てください。

// Creates a simple password's hash
function hashPassword( $password = false )
{
  // Checks if the password has more than 6 characters
  if( strlen( $password ) < 6 )
  {
    // Kills the script
    exit('Password is too short.');
   }

   // Split the 4 first characters of the password
   $salt = substr( $password, 0, 4 );

   // Calculate the md5 hash of the salt
   $salt = md5( $salt );

   // Get the rest of the password
   $password =  substr( $password, 3, strlen( $password ) );

   // Calculate the md5 hash of the password
   $password = sha1( $salt . $password );

   // Crypt the password
   $password = crypt( $password );

   return $password;
}

これが私が保存するパスワードです。次に、パスワードが正しいかどうかを確認する方法を確認します。

// Checks if a hashed password match a user input password
function checkHashedPassword( $password = false, $hashedPassword = false )
{
// Checks if the password has more than 6 characters
if( strlen( $password ) < 6 )
{
    // Kills the script
    exit('Password is too short.');
}

// Split the 4 first characters of the password
$salt = substr( $password, 0, 4 );

// Calculate the md5 hash of the salt
$salt = md5( $salt );

// Get the rest of the password
$password =  substr( $password, 3, strlen( $password ) );

// Calculate the md5 hash of the password
$password = sha1( $salt . $password );

// Checks the password and hash
if( crypt( $password, $hashedPassword ) == $hashedPassword ) 
{
    // Returns true
    return true;
}

// Returns false by default
return false;
}

お気づきのように、パスワードを格納する変数を作成し、次のコードのように、問題がないかどうかを確認できます。

$pass = hashPassword( $_POST['password'] );

if( !checkHashedPassword( $_POST['password'], $pass ) ) 
{
    exit('Password incorrect!');
}

それで、それは安全に動作しますか?

4

3 に答える 3

3

一般的で簡単な方法を探している場合簡単なパスワードハッシュAPIの追加はまだphpのRFCにありますが、使用できるircmaxwellによる非常に優れた実装があります

  $hash = password_hash($password, PASSWORD_BCRYPT);

検証

if (password_verify($password, $hash)) {
    /* Valid */
} else {
    /* Invalid */
}

ここからダウンロード

于 2012-10-18T21:39:57.653 に答える
1

次を使用できます。

$pass = <query password code>;

if( $pass != hashPassword( $_POST['password'] ); ) 
{
    exit('Password incorrect!');
}
于 2012-10-18T21:35:16.233 に答える
1

OWASPのパスワードストレージチートシートは、パスワードストレージとハッシュに関する優れたガイドラインを提供します。

重要なポイントは、強力なソルトを使用し、ハッシュを反復することです(現在64,000回以上)。

パスワードを設定するために広く使用されている優れたPHPライブラリは、OpenWallによるPortable PHP PasswordHashingFrameworkです。これを確認することをお勧めします。

于 2012-10-18T21:50:06.843 に答える