我在测试登录时遇到了一个奇怪的结果。 当我使用密码“100percent”时,会显示以下输出
ltu1GUwy71wHk = ltu1GUwy71wHk
如果我使用密码100percenttest
,我会得到相同的输出。
两个不同的密码如何产生相同的结果?
//Get login Details
$username = mysql_real_escape_string($_GET['username']);
$password = mysql_real_escape_string($_GET['password']);
$deviceID = mysql_real_escape_string($_GET['deviceID']);
$model = mysql_real_escape_string($_GET['model']);
$platform = mysql_real_escape_string($_GET['platform']);
$version = mysql_real_escape_string($_GET['version']);
$password = crypt($password, "MYSALT");
//Check login details
$loginQuery = "SELECT * FROM tblMember WHERE Username='$username'";
$loginResult = mysql_query($loginQuery);
$loggedIn = false;
$result = array();
while($row = mysql_fetch_array($loginResult))
{
echo $row['Password'] . "=" . $password . "<BR/>";
答案 0 :(得分:4)
标准的基于DES的crypt()返回salt作为输出的前两个字符。它也只使用str的前八个字符,因此字符串更长 以相同的八个字符开头将产生相同的结果(当时 使用相同的盐)。
您可以在盐的前面加上某些字符串,以强制PHP使用不同的算法(例如,$5$
使用SHA-256)。我个人建议在大量的轮次中使用Blowfish;请参阅文档以获取示例。
P.S。 - 您不应该在PHP代码中使用mysql
。请改用mysqli
扩展名。