我想使用一些特殊的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。
你能给我一些类似代码的东西吗? (使用用户名和密码制作表单,并查看其是否有效)
对不起我的错字,我来自荷兰..
答案 0 :(得分:2)
好吧,根据我的理解:您使用一些库进行注册,现在您想要创建一个使用注册使用的相同授权机制的登录表单。
在这种情况下,您发布了应该用于自己检查密码的代码。只需将用户输入传递给它,并确保SELECT
语句使用正确的表和列。
至于为什么哈希值不同,这是因为用户输入没有加密为sha256(password)
,而是sha256(concat(sha256(password),salt))
,其中concat为string concatenation操作,salt为additional input,其中case等于$ characters之间的部分(在你的例子中:ce9b7692bd2b8f79
)。
另外,你不能“解密”散列数据。您只能对一些其他数据进行哈希处理,并比较两个哈希值以检查它们是否相同。如果它们相同,则两个输入(可能)相同。 (“可能”部分是因为散列函数是抛射,而不是双射。)
答案 1 :(得分:0)
如果将明文密码放入函数check_password_db,它将检查它是否等于存储的sha256散列,因此如果该函数返回true,则可以设置一个会话变量,指示用户已成功登录。
答案 2 :(得分: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";
}
?>