正在检索sha1加密的密码.


retrieving a sha1 encrypted password..

我认为我的标题不适合我的问题。我的问题是,我有一个simle登录系统,只是为了测试目的,我正在使用sha1将我的密码加密到我的数据库中。看起来像这个

sha1($_POST['..some_variable...'])

为了进行身份验证,以纯文本形式检索加密密码的最佳方式是什么。比如从我的数据库中选择我的用户名和密码。

这应该会让您对它的工作原理有一个很好的了解。

try {
  $submittedEmail = !empty($_GET['email']) ? $_GET['email']: false;
  $submittedHash = !empty($_GET['password']) ? hash('sha1', $_GET['password']): false;
  if (!$submittedEmail || !$submittedHash) {
    throw new 'Exception('Required field(s) missing. Please try again.');
  }
  if ($stmt = $mysqli->prepare("SELECT hash FROM user WHERE email = ?")) {
    $stmt->bind_param("s", $submittedEmail);
    $stmt->execute();
    $stmt->bind_result($storedHash);
    $stmt->fetch();
    $stmt->close();
  }
  if (!$submittedHash != $storedHash) {
    throw new 'Exception('Wrong credentials submitted. Please try again.');
  }
  echo 'User ok!';
} catch (Exception $e) {
  echo $e->getMessage();
}

但是,我建议使用PHPs password_verify

由于您可能还没有使用PHP 5.5,因此可以使用此类

当用户创建帐户和/或密码时,您需要做的第一件事就是创建一个随机salt。

$salt = hash_hmac('sha512', "RandomStringHere", "EncryptionKeyHere");

您将把salt和他们的加密密码一起存储在数据库中。从那里加密基于文本的密码到并将其存储在数据库中。

$encyptPassword = hash_hmac('sha512', "plainTextPassword" . $salt , "EncryptionKeyHere");

因此,现在您有了一个与用户相关联的salt和加密密码
要进行身份验证,只需获取与用户相关联的salt,获取他们未加密的密码并对其进行加密——看看它是否匹配。

这样你就永远不会知道这些人的密码,只要他们试图登录时密码匹配即可。