我已经在php中创建了一个API,用户可以在他们的帐户上更改密码,但我这样做是为了让他们通过输入他们的电子邮件来更改密码,所以我在数据库中找到他们的列,但出于安全考虑我不认为这是一个好主意...所以我想添加它,以便通过电子邮件找到用户然后检查他的旧输入的密码是否与数据库中的加密匹配,所以他的输入将是1)电子邮件2)旧通3)新通行证。我的密码使用hash + salt加密
这是我的php文件
<?php
require_once('connection.php');
function forgotPassword($forgotpassword, $newpassword, $salt){
$result = mysql_query("UPDATE `member` SET `encrypted_password` = '$newpassword',`salt` = '$salt' WHERE `email` = '$forgotpassword'");
if ($result) {
return true;
}
else
{
return false;
}
}
function hashSSHA($password) {
$salt = sha1(rand());
$salt = substr($salt, 0, 10);
$encrypted = base64_encode(sha1($password . $salt, true) . $salt);
$hash = array("salt" => $salt, "encrypted" => $encrypted);
return $hash;
}
function isUserExisted($email) {
$result = mysql_query("SELECT email from member WHERE email = '$email'");
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
// user existed
return true;
} else {
// user not existed
return false;
}
}
$email = $_POST['email'];
$newpassword = $_POST['newpas'];
$hash = hashSSHA($newpassword);
$encrypted_password = $hash["encrypted"]; // encrypted password
$salt = $hash["salt"];
if (isUserExisted($email)) {
$user = forgotPassword($email, $encrypted_password, $salt);
if ($user) {
//pass changed
}
else {
//error
}
// user is already existed - error response
}
else {
//user not found
}
?>
有人能为我写一个解决方案吗?因此,它会检查数据库中的电子邮件和旧密码。
答案 0 :(得分:0)
您正在寻找的声音是简单的密码验证。在您的情况下,它看起来像:
function checkPass ($salt, $password, $storedPass){
$encrypted = base64_encode(sha1($password . $salt, true) . $salt);
if($storedPass==$encrypted){
return TRUE;
}
else{
return FALSE;
}
当然,您必须首先从数据库中挖掘$salt
的值。
答案 1 :(得分:0)
如果我理解正确您正在寻找Forgot Password
的解决方案。如果是这种情况,显而易见的情况是用户不记得当前密码并想要设置新密码。
我假设您有一个Forgot Password
链接指向Forgot Password
页面,用户可在其中输入Email Address
并点击下一步。
如果您的系统已经存储了秘密问题和答案,您可以添加步骤来检查其中至少一个,否则只需继续:
Email Address
。Email Address
存在,请继续。否则向用户显示消息。Random String
。Random String
保存在该用户的(用户)表中。Link
并将Email Address
和Random String
放入其中。Link
的电子邮件,并将其发送至Email Address
。现在,用户会收到该电子邮件并点击Link
:
Link
以获取Email Address
和Random String
。Email Address
和Random String
。Email Address
和Random String
组合,请继续。否则向用户显示消息。New Password
两次。New Password
。现在,您可以自动Sign In
用户或显示Sing In
页面,以便用户使用新凭据登录。
答案 2 :(得分:0)
好的所以,如果用户已登录并打算更改密码:
假设您有一个Change Password
链接:
当用户点击Change Password
链接:
Change Password
表单。Old Password
。New Password
和Retype New Password
。用户已登录,您可以拥有userId或emailAddress,也可以从(用户)表中检索。
现在:
New Password
和Retype New Password
相同。现在,如果您的系统允许多个用户登录同一帐户,则最好自动退出所有这些用户并要求再次登录。