我正在使用 crypt 如下:
$pass = crypt($pass, 'd4');
用于针对 mysql 表插入和验证密码。问题是如果密码相似,它会产生相似的结果。是否有一种算法可以保证不同密码的不同结果?
crypt()
只要您不使用旧的基于 DES 的模式 ( CRYPT_STD_DES
),使用就可以了。使用它的唯一正当理由是与使用此类密码哈希的旧软件的互操作性。
而是使用CRYPT_BLOWFISH
,CRYPT_SHA256
或CRYPT_SHA512
模式。这些是现代密码散列算法,可以接受任意长的密码,使用长盐并通过多次迭代支持密钥强化。
不幸的是,PHPcrypt()
接口有些笨拙:明确选择所需算法的唯一方法是提供格式正确的$salt
参数,这意味着您还必须自己生成实际的盐。不过,这可能比滚动您自己的密码哈希代码更容易、更安全。
你可以加盐。通常,如果您要存储密码,则需要对其进行哈希处理,而不是对其进行加密。如果你搜索它(比如在谷歌上),你可以了解很多东西。
从 php crypt() 页面:
基于标准 DES 的 crypt() 将 salt 作为输出的前两个字符返回。它也只使用 str 的前八个字符,因此以相同八个字符开头的较长字符串将生成相同的结果(当使用相同的盐时)。
您可能还想使用不同的加密方法,例如 MD5 或 SHA256,因为它们通常比 DES 更可取。