首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP加密/解密密码

PHP加密/解密密码
EN

Stack Overflow用户
提问于 2014-02-24 18:40:16
回答 1查看 7.8K关注 0票数 0

我正在尝试使用盐类加密来注册和登录表单,但我对它并不熟悉。所以一切都正常,除了登录不能识别密码,所以我很确定这是加密问题。这些是登记行:

代码语言:javascript
复制
$hash = hash('sha256', $password1);
function createSalt()
{
$text = md5(uniqid(rand(), true));
return substr($text, 0, 3);
}
$salt = createSalt();
$password = hash('sha256', $salt . $hash);

这些是供登录的:

代码语言:javascript
复制
$userData = mysql_fetch_array($result, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
if($hash != $userData['password'])
{
echo "Incorrect password";
}

有人能指出这个问题吗。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-02-24 20:35:51

实际上,您的代码应该在我所能看到的范围内工作,尽管它非常不安全!

  1. 问题: SHA256不适合散列密码,因为它的速度太快。使用像BCrypt这样的慢密钥派生函数。
  2. 问题:只有字母的三个字符的盐几乎没有保护。

也许您的数据库字段小于64个字符,或者您正在比较不同的密码。在任何情况下,都有一种更简单、更安全的密码散列方法,只需使用新函数散列()核实()即可。对于早期的PHP版本,也存在一个兼容性包

代码语言:javascript
复制
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21996192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档