如何使用 CRYPT_SHA512 增加 crypt PHP API 的盐长度?
How to increase the salt length of crypt PHP API with CRYPT_SHA512?
<?php
echo 'SHA-512:' . crypt('rasmuslerdorf', '$rounds=5000$usesomesillystringforsalt$');
输出:
SHA-512: $rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
它只使用 16 个字符的盐:usesomesillystri
参考: crypt — One-way string hashing
问题:
- 是否可以增加盐长度?
- 如果我们增加 salt 长度有什么缺点吗?
提前致谢。
两个问题立刻浮现在脑海中:
- 你为什么使用
CRYPT_SHA512
而不是 CRYPT_BLOWFISH
?
- 你为什么使用
crypt()
而不是 password_hash()
/password_verify()
/password_needs_rehash()
?
你应该使用 password_*
而不是 crypt()
的原因之一是它会为你生成一个独特的随机盐。如果您的目标是安全,您真的不想手动滚动自己的盐生成器。
Is it possible to increase the salt length?
SHA512Crypt 只允许 16 个字符的盐。 Bcrypt 使用 22 个字符的盐(128 位随机字符串的 base64 编码表示)。
让我们量化一下:一个 128 位盐(由 CSPRNG 驱动)将在 2^64(1.8446744e+19,或 18,446,744,073,709,551,616) 生成密码哈希值。
对于地球上每个活着的人来说,这大约是 26 亿个 bcrypt 哈希。
您不需要更长的盐来获得任何明显的安全收益。
Is there any drawback if we increase the salt length?
它会静静地截断,虽然你可能觉得使用更长的盐看起来很聪明,但这对安全性没有影响。
<?php
echo 'SHA-512:' . crypt('rasmuslerdorf', '$rounds=5000$usesomesillystringforsalt$');
输出:
SHA-512: $rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
它只使用 16 个字符的盐:usesomesillystri
参考: crypt — One-way string hashing
问题:
- 是否可以增加盐长度?
- 如果我们增加 salt 长度有什么缺点吗?
提前致谢。
两个问题立刻浮现在脑海中:
- 你为什么使用
CRYPT_SHA512
而不是CRYPT_BLOWFISH
? - 你为什么使用
crypt()
而不是password_hash()
/password_verify()
/password_needs_rehash()
?
你应该使用 password_*
而不是 crypt()
的原因之一是它会为你生成一个独特的随机盐。如果您的目标是安全,您真的不想手动滚动自己的盐生成器。
Is it possible to increase the salt length?
SHA512Crypt 只允许 16 个字符的盐。 Bcrypt 使用 22 个字符的盐(128 位随机字符串的 base64 编码表示)。
让我们量化一下:一个 128 位盐(由 CSPRNG 驱动)将在 2^64(1.8446744e+19,或 18,446,744,073,709,551,616) 生成密码哈希值。
对于地球上每个活着的人来说,这大约是 26 亿个 bcrypt 哈希。
您不需要更长的盐来获得任何明显的安全收益。
Is there any drawback if we increase the salt length?
它会静静地截断,虽然你可能觉得使用更长的盐看起来很聪明,但这对安全性没有影响。