我一直在寻找存储用户密码的最佳方式,但我并不真正了解安全性,因此我使用 Google 找到了很多关于加密和类似内容的信息。
我不喜欢使用可以在 Internet 上的博客或网站中获得的片段,我宁愿创建自己的解决方案,所以我最终开发了两个函数:一个创建哈希值,另一个检查“哈希值”密码。
我不知道我做的对不对,或者我只是在增加我的问题,所以看看下面的函数。
// 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!');
}
那么,它会安全地工作吗?