当前位置: 首页 > 知识库问答 >
问题:

PHP的password_hash()的行为

秦鸿羽
2023-03-14

我一直在研究加密密码的最佳方法,我决定继续使用BCRYPT,只是因为每次加密的成本和它通常被认为是目前最好的加密方法之一。

我使用的是双向盐,所以每个用户都有一个独特的盐,然后显然盐存储在我的应用程序中,我注意到一些相当奇怪的行为…根据PHP文档,这种行为是正常的吗?

不管怎样,下面是我使用的代码

$Crypto = new Crypto;
echo $Crypto->encrypt( "123456789abcdefghijklm", "StackOverflow_Is_Awesome!" ); // First parameter being the "User Salt", second being the password.

// Above outputs $2y$13$123456789abcdefghijkleepFY8JLvsf2YbnWolqQyO3DIzrCeNIu

现在,Crypto类:

<?php
// ASSUMING $this->hashingSalt = HBSNi3y7ruhbVGkhdg83ijdbvghiojkgudL;JP
class Crypto {

private $hashingSalt, $database;

public function __construct( $salt )
{
    $this->hashingSalt = $salt;
    $this->database = new DatabaseFunctions();
}

public function encrypt( $salt, $password )
{
    $options = array(
        'cost' => 13,
        'salt' => $salt //22 chars
    );

    return password_hash( $password . $this->hashingSalt, PASSWORD_BCRYPT, $options);
}
}

所以,我感兴趣的是,为什么这个函数只是在输出字符串的开头添加选项中的salt集呢?这真的很令人困惑...因为这并不完全是我所说的安全,而是对我来说击败了对象。

有人能给我建议,试着解释一下我完全过去的事情吗?谢谢

PHP文档:http://PHP.net/manual/en/function.password-hash.PHP

共有1个答案

佟阳焱
2023-03-14

salt是为了防止使用哈希值生成预先计算的表,一旦“坏人”得到哈希值,它就不会保持安全

还有你正在做的事情:

然后很明显存储在我的应用程序中的盐

 类似资料:
  • 问题内容: 我的注册脚本接受用户的密码,然后使用PHP的password_hash函数对密码进行加密,然后将其放入数据库中。当我使用刚刚创建的用户登录时,出现了检查密码是否相同的错误。就我而言,不是。在登录脚本中调用password_verify函数时,我在做什么错? 寄存器 登录 这是我执行var_dump时得到的: 很明显,密码没有匹配在一起。因此,在注册脚本上,密码被散列并发送到数据库。然后

  • 问题内容: 假设我想为用户存储密码,这是使用PHP 5.5的功能(或针对PHP 5.3.7+的该版本:https : //github.com/ircmaxell/password_compat)的正确方法吗? 然后我会做: 插入数据库。 然后进行验证: 问题答案: 现在忽略数据库语句的问题,我将回答有关的问题。 简而言之,不,这不是您的方式。您不想单独存储盐,应该同时存储哈希和盐,然后使用两者来

  • 我正在建立一个有用户的网站,和大多数包含一些用户类型系统的网站一样,他们用他们的电子邮件和密码登录。我使用PHP为我的网站的后端部分。 在阅读了互联网上的一些文章和帖子后,我了解了PHP函数password_hash()和password_verify(),并想知道像这样的示例过程是否足够安全? 注册用户,password_hash他们的密码,并将散列存储在数据库中。 登录时,使用password

  • 我正在考虑使用password_hash()函数来加密用户密码。据我所知,如果您不提供salt,这个函数将默认生成salt,甚至鼓励您使用默认的salt而不是您自己的salt。我目前正在权衡3个选择,不能决定哪一个去,所以如果你能帮助我,我会很感激。 1.选项:password_hash()和默认salt 2.选项:带有自定义盐的password_hash() 3.选项:根本不使用password

  • 问题内容: 最近,我一直在尝试在互联网上偶然发现的登录脚本上实现自己的安全性。在尝试学习如何制作自己的脚本以为每个用户生成盐的努力之后,我偶然发现了。 据我了解(基于本页的阅读内容),当您使用时,盐已经在行中生成。这是真的? 我的另一个问题是,吃2种盐不是很聪明吗?一个直接在文件中,另一个在数据库中?这样,如果有人破坏了数据库中的盐,您仍然直接在文件中保留了盐吗?我在这里读到,存储盐从来都不是一个

  • 我正在编写一个创建用户的简单任务。作为该任务的一部分,我想从defaults/main.yml中读取密码 默认值/main.yml test_user:testuser test_group:testgroup test_user_password:somepassword 我的任务文件如下 -名称:“为TestUser创建组”  · 组: 名称:“{{test_group}}” 状态:当前 -名