加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Blowfish盐长度为Crypt()函数?

发布时间:2020-12-13 17:35:37 所属栏目:PHP教程 来源:网络整理
导读:根据 crypt() documentation,盐需要从字母“./0-9A-Za-z”的22个64位数字. 这是他们给出的代码示例: crypt('rasmuslerdorf','$2a$07$usesomesillystringforsalt$'); 第一个令人困惑的部分是盐有25个字符,而不是22. 问题1:这是否意味着盐应该长于22个字符?
根据 crypt() documentation,盐需要从字母“./0-9A-Za-z”的22个64位数字.

这是他们给出的代码示例:

crypt('rasmuslerdorf','$2a$07$usesomesillystringforsalt$');

第一个令人困惑的部分是盐有25个字符,而不是22.

问题1:这是否意味着盐应该长于22个字符?

然后我自己测试了这个功能,注意到了一些.如果我使用20个字符的盐,我得到这个

// using 20 char salt: 00000000002222222222
crypt('rasmuslerdorf','$2a$07$00000000002222222222$');
// $2a$07$00000000002222222222$.6Th1f3O1SYpWaEUfdz7ieidkQOkGKh2

所以,当我使用一个20字符的盐,整个盐在输出.这是方便的,因为我不必将盐分存放在一个单独的地方. (我想用随机盐).我可以从生成的哈希中读出盐.

但是,如果我使用22个字符的盐作为文件说,或更长的盐,盐被切断在最后.

// using 22 char salt: 0000000000222222222222
crypt('rasmuslerdorf','$2a$07$0000000000222222222222$');
// $2a$07$000000000022222222222uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// 22nd character of the salt is gone

// using 25 char salt: 0000000000222222222222222
crypt('rasmuslerdorf','$2a$07$0000000000222222222222222$');
// $2a$07$000000000022222222222uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// Same hash was generated as before,21 chars of the salt are in the hash

问题2:那么盐的适当长度究竟是多少? 20? 22?更长?

问题3:另外,当查询密码的时候,读取哈希的盐是个好主意吗?而不是将盐储存在一个单独的领域,并从那里读取它. (这似乎是多余的,因为盐似乎包含在哈希中).

Blowfish盐应该是22个字符长(包括尾随$,所以21) – 你可以使用var_dump(CRYPT_SALT_LENGTH)进行双重检查,现在我无法验证,但是我的猜测是,较少的字符将返回一个错误,更多的字符将被截断.

关于你的第三个问题:是的,你应该使用哈希本身的嵌入盐(和成本)参数读取和检查哈希.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读