tim*_*may 9 php encryption salt mcrypt
我昨天在这里,得到了一些非常好的答案.我把我得到的东西放在一起,我认为这将是一个相当安全的算法.我在使用带有生成盐的for循环的河豚时遇到了问题.
我正在使用base64字符和for循环来获取随机字符串.我想把这个生成的字符串作为salt插入到crypt函数中.
因为关于河豚的文档非常稀疏,PHP文档甚至没有提到它,所以我在这里黑暗中刺伤.
真正奇怪的是,如果您按照现在的方式运行此代码,它将不会失败.除去任一的"$ 2A $ $ 07"从上面的for循环或从crypt函数,它会间歇性地返回一个加密的字符串.我对河豚的理解是,加密的字符串必须以'$ 2a $ 07 $'开头,以$'结尾,因此在crypt函数中连接.我真的不需要for循环之上的开始字符串而只是想得到摆脱它.
我还想澄清关于在数据库中存储随机盐的最佳实践,还是将crypt函数的输出存储在数据库中?
昨天,没有真正的代码被抛出,只是讨论.我今天想把一些代码放在一起,并且有一些相当安全的东西.如果有人能想出更好的算法,我总是敞开心扉.
$base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
$salt = '$2a$07$';
for($i=0; $i<60; $i++)
{
$salt .= $base64[rand(0,63)];
}
return crypt('password', '$2a$07$'.$salt.'$');
Run Code Online (Sandbox Code Playgroud)
似乎他们crypt()
不喜欢+
盐中的炭,以及许多其他特殊的炭(*
等%
)。如果你过滤掉它们,它应该在每次尝试时都能工作(并且不需要重复盐 ID 字符串)。