我想使用一些特殊的 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 中的数据来检查用户是否输入了正确的密码,从而使用户登录到我的网站。如果您需要更多信息,请回复,我会给您。我的目标是制作一个适用于 session 的登录脚本。
我的表是 ID、am_(用户名)、密码和 ip。
你能给我一些类似代码的东西吗? (用用户名和密码制作一个表单,并查看是否有效)
抱歉我的拼写错误,我来自荷兰..
最佳答案
嗯,据我了解:您使用一些库进行注册,现在您想要制作一个使用与注册相同的授权机制的登录表单。
在这种情况下,您发布了应该用于自己检查密码的代码。只需将用户输入传递给它并确保 SELECT
语句使用正确的表和列即可。
至于哈希值不同的原因,这是因为用户输入没有加密为 sha256(password)
而是 sha256(concat(sha256(password),salt))
其中连接是 string concatenation操作和盐是 additional input ,在本例中等于 $ 字符之间的部分(在您的示例中:ce9b7692bd2b8f79
)。
此外,您无法“解密”散列数据。您只能散列一些其他数据并比较两个散列以检查它们是否相同。如果它们相同,则两个输入(可能)相同。 (“可能”部分是因为哈希函数是满射,而不是双射。)
关于使用 SHA256 的 PHP 登录脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15842639/