2

我想为我的网站制作一个登录脚本,使用一些特殊的 SHA256 加密和一个与之链接的 mysql 数据库。(当然还有一种形式:P)

我使用 Minecraft 插件“Authme”进行注册。它在 SHA256 中对密码进行哈希处理并将其存储到 mysql 数据库中。但代码$SHA$ce9b7692bd2b8f79$644c2a5710bb93f82471d08234435d7d02b1bbc09aff2cf23370f187aab37716 与我从某些网站制作的 SHA256 哈希值不同。4aae7aba013ffed685a1354a0ebb576b8f1f58997b96cf3ef096282cfe737bff

Authme 的开发人员给了我一个“简单”的代码来解密密码,但我不知道如何将它放入我的脚本中。

// @return true if password and nickname match 
function check_password_db($nickname,$password) {
  // Here u have to include your DB connection and select!
  $a=mysql_query("SELECT password FROM authme where username = '$nickname'");
  if(mysql_num_rows($a) == 1 ) {
    $password_info=mysql_fetch_array($a);
    $sha_info = explode("$",$password_info[0]);
  } else 
    return false;
  if( $sha_info[1] === "SHA" ) {
    $salt = $sha_info[2];
    $sha256_password = hash('sha256', $password);
    $sha256_password .= $sha_info[2];;
    if( strcasecmp(trim($sha_info[3]),hash('sha256', $sha256_password) ) == 0 ) 
      return true;
    else return false;
  }
}

所以底线是:我想知道如何通过查看 mySQL 中的数据来检查用户是否输入了正确的密码,从而制作一个让用户登录到我的网站的表单。如果您需要更多信息,请回复,我会给您。我的目标是制作一个适用于会话的登录脚本。

我拥有的表是 ID、am_(用户名)、密码和 ip。

你能给我一些类似代码的东西吗?(用用户名和密码制作一个表格,看看它是否有效)

对不起,我的错字,我来自荷兰..

4

3 回答 3

2

好吧,据我了解:您使用一些库进行注册,现在您想制作一个使用与注册相同的授权机制的登录表单。

在这种情况下,您发布了应该用于自己检查密码的代码。只需将用户输入传递给它并确保SELECT语句使用正确的表和列。

至于为什么哈希不同,这是因为用户输入没有被加密,sha256(password)但是sha256(concat(sha256(password),salt))concat 是字符串连接操作,而 salt 是附加输入,在这种情况下,它等于 $ 字符之间的部分(在你的例子中:)ce9b7692bd2b8f79

此外,您不能“解密”散列数据。您只能散列一些其他数据并比较两个散列以检查它们是否相同。如果它们相同,则两个输入(可能)相同。(“可能”部分是因为散列函数是满射,而不是双射。)

于 2013-04-05T20:55:14.177 回答
0

如果您将普通密码放入函数 check_password_db 中,它将检查它是否等于存储的 sha256 哈希,因此如果该函数返回 true,您可以设置一个会话变量,指示用户已成功登录。

于 2013-04-05T20:50:36.973 回答
0

您提供的代码为您工作。您所要做的就是将用户输入的表单数据传递给提供的函数并检查它的返回值以确定登录详细信息是否正确。

这是最简单的用例和代码来帮助您。

用户导航到登录页面 (login.html)

    <!-- Login Page - login.html -->
    <form name='login-form' action='login.php' method='POST'>
    Username <input type='text' name='username' value=''></input>
    Password <input type='password' name='password' value=''></input>
    <input type='submit' value='Login' name='submit-button'></input>
    </form>

一旦用户输入登录信息并单击“提交”,它应该会转到您的 PHP 脚本页面

<?php
/* Login Script - login.php */

//Enable Session
session_start(); 
//Perform Form Submission Checks

$un = $_POST['username'];
$p = $_POST['password'];

//Validate form input data using PHP and mysql best practices to avoid SQL injections and attacks
//Connect to Database

function check_password_db($nickname, $password)
{
   /* Your Code Here */
}

$return_var = check_password_db($un,$p);

if($return_var == true)
{
    //User entered valid data
    $_SESSION['LOGIN'] = TRUE;
    echo "Login Successful";
}
else
{
    //User entered invalid data
    echo "Login Unsuccessful";
}
?>
于 2013-04-05T21:10:40.710 回答