php - sha256/salt密码 key 存储

标签 php mysql salt sha256 password-hash

我创建了一个注册表,处理如下:

function register_user() {
   global $conn;
   $name      = sanitize($_POST['name']);
   $email     = sanitize($_POST['email']);
   $password = sanitize($_POST['password']);
   $salt      = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));

   $saltedPW = $password . $salt;
   $hashedPW = hash('sha256', $saltedPW);

   mysqli_query($conn, "INSERT INTO users (name, email, password, salt) VALUES ('$name', '$email', '$hashedPW', '$salt')");

然后按如下方式处理登录表单:

    function login($email, $password) {
    global $conn;
    $user_id = user_id_from_username($email);
    $query   = mysqli_query($conn, "SELECT salt FROM users WHERE email = '$email'");
    $row1    = mysqli_fetch_assoc($query);
    $salt    = $row1['salt'];

    $saltedPW = $password . $salt;
    $hashedPW = hash('sha256', $saltedPW);

    $result = mysqli_query($conn, "SELECT COUNT(user_id) FROM users WHERE email = '$email' AND password = '$hashedPW'");
    $row     = mysqli_fetch_row($result);

    return ($row[0] == 1) ? $user_id : false;
}

用户表结构如下: 用户身份;姓名;电子邮件;密码;盐(用于密码恢复、管理员权限等的附加列)。向我公司的 IT 合规部门提交了详细信息后,有 PHP 经验(毫无疑问超过我)的人说我不能在系统中存储加密 key - 如果有人得到文件,他们可以解密密码。我的问题是 - 这是正确的吗?我的过程有缺陷吗?我进行的所有研究表明,使用随机盐的 SHA256 哈希是最好的方法之一。

最佳答案

I can't store the key for the encryption in the system

你没有。你在散列,你没有加密。盐 !== 键

if someone got the file they could decrypt the password

没有。没有什么是加密的,所以没有什么可以解密的。他们只会得到生成的哈希值,他们仍然需要暴力破解。

Is my process flawed?

是的,但不是因为他们的评论。它有缺陷,因为您永远不应该使用 SHA 或 MD5 或类似的密码。它们的设计速度很快,这不是您想要的。你想要一些故意占用大量 CPU 的东西,以便不合时宜地进行暴力攻击。这正是 password_hash() 的内容功能是为了。使用它。

关于php - sha256/salt密码 key 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31680495/

相关文章:

php - PDO SELECT 列正确

php - Web 浏览器未返回任何内容 - 功能错误?

php - 我如何知道我是否位于数据集中的最后一行?

php - 从数据库中检索 salt+hash 以进行验证

java - 使用盐处理密码散列的问题

php - 显示旧响应的 Jquery ajax 请求

php - Delphi中解析PHP/JavaScript文档结构

PHP的password_hash函数salt长度是21还是22?

javascript - 有没有办法使用 "mailto"发送电子邮件,并使用代码检查用户是否拥有 Gmail 或 Outlook(或其他)帐户?

php - 在 Symfony2 assetic 中加载 JS 文件的顺序