Gum*_*mbo 348
bcrypt的模块化密码格式包括
$2$,$2a$或$2y$识别哈希算法和格式$.,/,0- 9,A- Z,a- z也就是不同的标准Base 64编码字母表)由以下组成:
因此总长度分别为59或60字节.
当您使用2a格式时,您将需要60个字节.因而对于MySQL的,我会建议使用CHAR(60) BINARY或BINARY(60)(见的_bin和二进制排序规则有关的差异信息).
CHAR不是二进制安全的,并且不仅仅依赖于字节值而是依赖于实际的整理; 在最坏的情况下A被视为等于a.有关更多信息,请参阅The _binand binaryCollations.
And*_*e D 49
Bcrypt哈希可以存储在BINARY(40)列中.
BINARY(60),正如其他答案所暗示的那样,是最简单和最自然的选择,但如果你想最大化存储效率,你可以通过无损解构哈希来节省20个字节.我在GitHub上更详细地记录了这一点:https://github.com/ademarre/binary-mcf
Bcrypt哈希遵循称为模块化密码格式(MCF)的结构.二进制 MCF(BMCF)将这些文本哈希表示解码为更紧凑的二进制结构.在Bcrypt的情况下,得到的二进制散列是40个字节.
Gumbo很好地解释了Bcrypt MCF哈希的四个组成部分:
$<id>$<cost>$<salt><digest>
Run Code Online (Sandbox Code Playgroud)
对BMCF的解码如下:
$<id>$ 可以用3位表示.<cost>$,04-31,可以用5位表示.将这些放在一起1个字节.1 + 16 + 23您可以在上面的链接中阅读更多内容,或者在GitHub上查看我的PHP实现.
Mik*_*ike 21
如果您使用PHP password_hash()与PASSWORD_DEFAULT算法生成bcrypt哈希(我认为这是很大一部分人阅读此问题)请务必记住,将来password_hash()可能会使用不同的算法作为默认值,因此可能影响哈希的长度(但可能不一定更长).
从手册页:
请注意,此常量旨在随着时间的推移而变化,因为新的和更强大的算法被添加到PHP中.因此,使用此标识符的结果长度可能会随时间而变化.因此, 建议将结果存储在数据库列中,该列可以扩展到超过60个字符(255个字符将是一个不错的选择).
使用bcrypt,即使你有10亿用户(即你目前正在与facebook竞争)存储255字节的密码哈希,它只会有~255 GB的数据 - 大约相当于一个小型SSD硬盘的大小.存储密码哈希极不可能成为应用程序的瓶颈.然而,在关闭的机会,存储空间真的是出于某种原因的问题,您可以使用PASSWORD_BCRYPT强制password_hash()使用bcrypt,即使这不是默认的.请务必随时了解bcrypt中发现的任何漏洞,并在每次发布新的PHP版本时查看发行说明.如果更改默认算法,最好查看原因并做出是否使用新算法的明智决定.
Jam*_*s C 18
我不认为你可以做的任何巧妙的技巧存储,例如你可以用MD5哈希.
我认为你最好的选择是将它存储为CHAR(60)60个字符长
| 归档时间: |
|
| 查看次数: |
122966 次 |
| 最近记录: |