使用电子邮件地址更改哈希(加密密码)的更好方法

时间:2015-07-11 17:38:49

标签: php mysql hash salt

我在更改登录密码方面遇到了麻烦。我使用hash和salt作为密码。我无法在phpmyadmin上更改它,因为它是哈希类型的字符。这是我的

create_acc.php

<?php
include_once('config.php');
$email = $_POST['e-mail'];
$pass = $_POST['pass'];

$hash = hash('sha256',$pass);

function createSalt(){
    $text = md5(uniqid(rand(), true));
    return substr($text,0,3);
}
$salt = createSalt();
$pass = hash('sha256',$salt.$hash);
$email = $mysqli->real_escape_string($email); //$mysqli is located at my config.php

$query = $mysqli->query("INSERT INTO `login`(`email`,`pass`,`salt`) VALUES('$email','$pass','$salt')");

$mysqli->close();

header('location: login.html');
?>

关于如何创建更改密码或忘记密码的任何想法,就像现在的登录系统一样。每当您忘记密码或想要更改密码时,服务器都会在您的电子邮件中发送有关更改加密密码的链接?

2 个答案:

答案 0 :(得分:0)

不,使用phpmyadmin你可以做一些简单的加密,比如md5和sha1。但你可以用一种棘手的方式做到这一点。从任何在线服务或php加密您的密码,然后将您的加密密码放在您的phpmyadmin。就是这样:))

答案 1 :(得分:0)

您可以使用相同的逻辑来实际重置密码/分配新密码。您可以用最简单的方法做的是创建一个密码重置表单和一些URL(端点),它接受(POST)包含电子邮件或用户名作为输入/数据的请求。一旦你得到它,你通常会发送一封电子邮件到用户的电子邮件,其中包含允许用户重置密码的URL。此部分应创建一个唯一的令牌,并应存储在您选择的数据库中。发送给用户的电子邮件通常由作为URL一部分的令牌组成,并且一旦用户访问,就应该理想地删除令牌,但是您的里程和删除/保留令牌的选择可能因应用程序和用户而异。一旦用户访问为密码重置发送的URL,您将执行令牌查找,如果令牌存在则查找哪个用户想要重置密码,然后只允许用户输入密码(&amp;确认密码)。用户点击提交后,您只需通过创建新用户时使用的相同密码哈希功能传递新密码。

哦,你可以用你的代码做得更好。看起来它来自几年前。它可以更安全,更好地编写。我建议检查php手册以获取密码散列和准备好的声明。