2013-04-05 123 views
2

我想使用一些特殊的SHA256加密和连接它的mysql数据库为我的网站创建登录脚本。 (和一种形式的课程:P)使用SHA256的PHP登录脚本

我使用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。

你能给我这样的代码吗? (制作与用户名和密码的形式,看其是否有效或无效)

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

+0

SHA256是不加密的,所以你不能解密。 – 2013-04-05 20:38:53

回答

2

那么,据我所知:你使用一些库进行注册,现在你想做一个登录表单,使用注册使用相同的授权机制。

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

至于为什么散列不同,这是因为用户输入不为sha256(password)sha256(concat(sha256(password),salt))加密其中的concat是string concatenation操作和盐是additional input,其在这种情况下等于$字符之间部分(在您的示例:ce9b7692bd2b8f79) 。

另外,你不能“解密”散列数据。你只能散列一些其他数据并比较两个哈希来检查它们是否相同。如果它们相同,则两个输入(可能)都是相同的。 (“可能”部分是因为哈希函数是被拒绝的,而不是双向的。)

0

如果你把简单的密码进入功能check_password_db它将检查如果它等于存储的sha256散列,那么如果该函数返回true,则可以设置一个会话变量,指示用户已成功登录。

0

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

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

用户导航到登录页面(登录。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"; 
} 
?> 
+0

你好!感谢您的快速回复。你能否在脚本中包含我上面发布的脚本?我已经做到了,但它所做的唯一的事情是把?sha256_password =放在我的网页末尾。你能做出类似于它匹配的东西说“YAY!IT WORKS”或类似的东西吗? – 2013-04-06 11:16:44

+0

我不明白你得到了什么确切的输出。确保你正在传递数据。如果必须使用echo语句进行调试。我为你的代码添加了一个占位符,并且还为你添加了echo/print语句。 – GeekByte 2013-04-08 16:53:35

+0

嘿!我已经做了你所说的一切,但是当我提交表格时,它说

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in MYDOMAIN on line 19
2013-04-12 14:52:25