使用 SHA256 的 PHP 登录脚本

标签 php mysql minecraft

我想使用一些特殊的 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/

相关文章:

PHP 计时器每秒输出到 HTML div 中

php - 什么是处理 PHP 应用程序到 SQL 数据库的良好包装器/框架/库?

mysql - 根据货币订购价格

Python 无法与 Minecraft 服务器的子进程通信

lua - 我如何在 turtleOS Minecraft Tekkit 中编写自己的函数

php - 从数据库中选择填充有 SQL 的输入

mysql - 从一行 MySQL 查询多行

mysql - 主键与键索引速度

java - net.minecraft.util.Session.getToken() 和 net.minecraft.util.Session.getProfileID() 的奇怪返回值

php - 将两个字符串合二为一并将它们分开以创建更新查询?