ユーザーのパスワードを保存するための最良の方法を探していましたが、セキュリティにはあまり興味がないので、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!');
}
それで、それは安全に動作しますか?