【发布时间】:2013-08-01 06:54:16
【问题描述】:
我一直在搞乱 PHP 中的密码加密,起初我使用 MD5 函数将密码保存在数据库中,但我在登录时遇到了麻烦。然后我尝试了哈希函数,但我再次遇到了登录问题在。
我尝试这样做的方法是在创建帐户时加密密码,然后每次有人登录时,使用相同的方法再次加密密码,然后检查数据库以查看是否加密密码匹配。我可以很好地创建一个帐户,似乎每当我使用相同的密码创建一个帐户时,哈希值都是相同的,所以我假设它们每次都不会改变(我对加密和哈希值知之甚少)。
这是我当前的新用户创建sn-p:
<?php
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "NewUser")) {
$insertSQL = sprintf("INSERT INTO users (username, password, name) VALUES (%s, %s, %s)",
GetSQLValueString($_POST['username'], "text"),
GetSQLValueString(hash("sha512",$_POST['password']), "text"),
GetSQLValueString($_POST['name'], "text"));
mysql_select_db($database_ReallyGoodPieConnection, $ReallyGoodPieConnection);
$Result1 = mysql_query($insertSQL, $ReallyGoodPieConnection) or die(mysql_error());
?>
这是我的登录 sn-p:
if (isset($_POST['username'])) {
$loginUsername=$_POST['username'];
$password=$_POST['password'];
$password = hash("sha512", $password);
print $password;
$MM_fldUserAuthorization = "permissions";
$MM_redirectLoginSuccess = "index.php";
$MM_redirectLoginFailed = "login.php";
$MM_redirecttoReferrer = true;
mysql_select_db($database_ReallyGoodPieConnection, $ReallyGoodPieConnection);
$LoginRS__query=sprintf("SELECT username, password FROM users WHERE username=%s AND password=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")
谁能帮我理解实际登录失败的原因。我使用完全相同的密码进行创建和登录(显然)并使用相同的加密方法。这真的让我很困惑。
【问题讨论】:
-
不要混淆哈希和加密,they are different things。
-
堆栈溢出问题stackoverflow.com/questions/401656/…对PHP中的密码有很多很好的阅读
-
@FDL 好的,谢谢。就像我说的那样,我对这些东西的了解并不是那么好
-
您的登录 sn-p 似乎不完整。提交的密码和存储的哈希之间没有实际的比较。
-
对不起,我会添加其余的。我只是在演示散列方法。
标签: php mysql encryption