gpt4 book ai didi

php - 在 MYSQL 中重现 PHP hash_hmac 功能

转载 作者:行者123 更新时间:2023-11-29 13:49:11 27 4
gpt4 key购买 nike

我正在创建一个更安全的用户密码表,其中包含用户名、强随机盐和 PHP 中的加盐/散列密码,如下所示:

$salt = bin2hex(openssl_random_pseudo_bytes(64));
$pass = hash_hmac('sha512', $plainTextPass, $salt);
$this->user->password = $pass;
$this->user->salt = $salt;
$this->user->save();

我试图在 MySQL 中重现此功能,但运气不佳。当从脚本部署数据库服务器时,我需要创建一些用户。据我了解, hash_hmac 方法只需要盐,将密码附加到它,然后用 sha 512 对其进行哈希处理。似乎这在 MySQL 中很容易做到,但是:

INSERT INTO `users` (`email`, `username`, `password`, `salt`) 
VALUES('test@example.com', 'admin', SHA2('9d1ebf3559baf9ffca61df5cec0b9eb067ae7912d097ad45f3a3086c39bf11292d92a7dfad497557fac7fbf7c24209db8b7696664d54c7e6bc55f720121bd38dadmin', 512), '9d1ebf3559baf9ffca61df5cec0b9eb067ae7912d097ad45f3a3086c39bf11292d92a7dfad497557fac7fbf7c24209db8b7696664d54c7e6bc55f720121bd38d');

在这种情况下,盐只是我手动生成的硬编码盐,您可以看到我只是将密码“admin”附加到密码字段的末尾。该用户创建,但我无法使用该管理员用户名和密码登录。

我应该在 MySQL 中以不同的方式执行此操作吗?

最佳答案

HMAC不是通过串联计算的,而是如下所示(有关更多详细信息,请参阅链接)。

HMAC (K,m) = H ((K ⊕ opad) ∥ H ((K ⊕ ipad) ∥ m))

但是,顾名思义,它是消息认证码,而不是密码散列方案。专为密码散列设计的算法将是更好的选择。 scrypt , bcrypt ,或PBKDF2将是一个不错的选择。

关于php - 在 MYSQL 中重现 PHP hash_hmac 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943823/

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