根据 PHP 的文档,bcrypt salt 是由
“$2a$”,两位数的成本参数,“$”,以及来自字母表“./0-9A-Za-z”的 22 位数字
因此,如果我使用 crypt() 函数对我的密码进行哈希处理,则结果输出包括前 7 个字符($2a$10$,如果 10 是成本参数)作为盐的一部分 - 而且,根据所有示例,我能够在互联网上找到,这个完整的输出被写入db。
我想知道将这些第一个字符与其余的盐和加密数据一起存储有什么意义。它们的含义对我来说是完全清楚的,但我真的不明白为什么这些信息应该与哈希的其余部分一起写。它们不是关于算法和计算的自适应成本的“只是”信息吗?那么存储此类与应用程序相关的信息有什么好处呢?而且(即使听起来很幼稚)为什么要将它们披露给最终可以获取我的数据库的攻击者?