首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能解释一下PHP函数crypt()是如何工作的吗?

有人能解释一下PHP函数crypt()是如何工作的吗?
EN

Stack Overflow用户
提问于 2014-12-02 13:27:40
回答 1查看 334关注 0票数 0

根据我的理解,crypt( string,salt),拿出盐,把它钉在字符串参数的加密版本的前面。

代码语言:javascript
复制
$pw = "secret";
$format_and_salt = $2y$10$MWRmZTkwMTc5ZGJjZDI1NT;
$hash = crypt($pw, $format_and_salt);

$hash作为$2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm存储到数据库列hashed_password

或者被分解:

第一部分是$format_and_salt:$2y$10$MWRmZTkwMTc5ZGJjZDI1N (sans the 'T')

第二部分是加密的$pw:OfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

如果我再次使用crypt根据数据库中存储的hashed_password验证用户提交给$_POST的密码,这两种情况的输出似乎都没有反映我上面描述的逻辑。所以我漏掉了一些东西。

那么:

$existing_hash = $admin['hashed_password'] ($admin是最终从查询派生的数组)。

crypt($pw, $existing_hash)返回$2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

这与上面的$hash是一样的。这将验证或使用户提交给$_POST的内容无效,但如上所述,如果我遵循上面第一个crypt()的逻辑,我将期望:

第一部分是$existing_hash:$2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

+

第二部分是加密的$pw:OfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

我希望将其组合为:$2y$10$MWRmZTkwMTc5ZGJjZDI1NOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqmOfGsQUgIu7ezETpe.uHjGqbmdrw2.vqm

有人能解释一下为什么原始的加密和上面用来验证第一个的加密都有相同的输出吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-12-02 13:35:17

您正在使用Blowfish加密-仅使用盐的前22个字符。这是使用河豚的好处之一。

PHP manual

Blowfish使用盐进行散列,如下所示:"$2a$","$2x$“或"$2y$",两位数成本参数,"$",以及字母表"./0-9A-Za-z”中的22个字符。

这意味着来自$existing_hash的盐最终是$2y$10$MWRmZTkwMTc5ZGJjZDI1N -与之前完全相同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27242464

复制
相关文章

相似问题

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