相关疑难解决方法(0)

Crypt()函数的河豚盐长度?

根据crypt()文档,salt需要是字母"./0-9A-Za-z"的22个64位.

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

crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$');
Run Code Online (Sandbox Code Playgroud)

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

问题1:这是不是意味着盐应该是更长的超过22个字符?

然后我自己测试了这个功能并发现了一些东西 如果我使用20个字符的盐,我会得到这个

// using 20 char salt: 00000000001111111111
crypt('rasmuslerdorf', '$2a$07$00000000001111111111$');
// $2a$07$00000000001111111111$.6Th1f3O1SYpWaEUfdz7ieidkQOkGKh2
Run Code Online (Sandbox Code Playgroud)

因此,当我使用20个字符的盐时,整个盐都在输出中.这很方便,因为我不必将盐存放在一个单独的地方.(我想使用随机盐).我将能够从生成的哈希中读取盐.

但是,如果我使用22字符盐作为文档说明,或者更长的盐,最后将盐切断.

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

// using 25 char salt: 0000000000111111111122222
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122222$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// Same hash was generated as before, 21 chars of the salt are in the hash
Run Code Online (Sandbox Code Playgroud)

问题2:那么,盐的长度到底是多少?20?22?更长?

问题3:此外,在检查密码时,从哈希中读取盐是否是个好主意?而不是将盐存储在单独的字段中并从那里读取.(这似乎是多余的,因为盐似乎包含在哈希中).

php passwords hash cryptography blowfish

10
推荐指数
1
解决办法
6710
查看次数

标签 统计

blowfish ×1

cryptography ×1

hash ×1

passwords ×1

php ×1