0

测试登录时,我得到了一个奇怪的结果。当我使用密码“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/>";
4

1 回答 1

4

文档中:

基于标准 DES 的 crypt() 将 salt 作为输出的前两个字符返回。它也只使用 str 的前八个字符,因此以相同八个字符开头的较长字符串将生成相同的结果(当使用相同的盐时)。

您可以在 salt 前面加上某些字符串来强制 PHP 使用不同的算法(例如,$5$使用 SHA-256)。我个人建议在大量回合中使用 Blowfish;请参阅文档以获取示例。

PS - 你不应该mysql在你的 PHP 代码中使用,永远。请改用改进的mysqli扩展程序。

于 2013-08-05T06:12:11.953 回答