gpt4 book ai didi

php - 关于PHP的password_hash()的问题

转载 作者:行者123 更新时间:2023-12-03 09:20:34 28 4
gpt4 key购买 nike

我有一些关于 PHP 的 password_hash 函数的问题。

我注意到如果这样做

echo password_hash("12345", PASSWORD_DEFAULT);

然后我得到类似的东西

$2y$10$PgMmle9Ue4o3m7ITJcGa0ucmWXSZgqbJBF9I4qd/aqzn/vQIwbi/O

所以我的问题是

1) $2y$10$ 部分是否会提示所使用的算法,并使攻击者更容易知道原始字符串是什么?

2) 我可以将字符串存储在 $2y$10$ 之后,并在需要使用密码时随时将其连接起来吗?

3) 为什么使用$2y$10$? future 这种情况会改变吗?那么在我的数据库中,我的密码是 $2y$10$ ,还有一些是 $2y$25$ ?使用 password_verify 一切都会顺利运行?

最佳答案

来自阅读password_hash的手册看起来像在 $aa$bb$ 中,bb 似乎代表所使用算法的“成本”,而 aa 似乎是 (至少目前)总是2y

Wouldn't the part of $2y$10$ give a hint of what algorythm was used and make it easier for an attacker to know what the original string was?

是的,它会给出提示,但是

  1. 对于许多函数来说,字符串的其余部分也是如此(例如,md5/sha1 哈希值始终由 32/40 个十六进制字符组成)。
  2. 这不应该成为问题,因为无论如何您都不应该依赖混淆,而应该依赖强大的算法(正如 arkascha 在 his comment 中正确指出的那样)。

Why $2y$10$ is used?

因为有人认为这是个好主意。

Could that change in the future?

我想是的。
第二部分已经发生变化,第一部分在 the manual 中提到。作为“$2y$”标识符,但不保证不会添加其他标识符。

So in my DB I have passwords with $2y$10$ and some with $2y$25$? and everything would run smoothly using password_verify?

看看examples in the manual - 已经是这样了。
password_hash(..., PASSWORD_DEFAULT) 似乎会生成 $2y$10$ 前缀,但是 password_hash(..., PASSWORD_BCRYPT, ['cost' = > 12]) 生成 $2y$12$

Can I just store the string after $2y$10$ and concatenate it anytime I have to work with the password?

我建议不要这样做。
您也许可以让它工作,甚至可以防止它因任意更改而中断,但如果您唯一关心的是加密字符串暗示所使用的加密方法,那么更好的选择是添加额外的对称加密层。
例如:

$password = password_hash("12345", PASSWORD_DEFAULT);
$key = pack('H*', md5('lorem').md5('ipsum')); // Must be 16, 24 or 32 bits
$secret = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $password, MCRYPT_MODE_ECB);
// Store $secret in the database

这样,如果攻击者没有您的源代码,他们就无法知道加密数据的含义,而如果他们确实可以访问您的源代码,他们只需查看所使用的加密方式即可无论如何。

但是,即使攻击者知道正在使用 password_hashPASSWORD_DEFAULT,他们也不应该能够破解它。

关于php - 关于PHP的password_hash()的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32425658/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com