我正在尝试为我的网站做一个或多或少安全的登录系统,我还没有太多的时间来保护东西,所以我正在学习。我想听听你对以下哪一个更好以及为什么更好的看法。(或者我在什么地方弄错了?)
$staticsalt = '$%*#)$*)^A#$#543667ggfdf\#$%x';
$random = md5(uniqid(mt_rand(), true));
$salt = hash('sha512',$random.$_POST['password'].microtime().$staticsalt);任一(在数据库中不需要$salt的地方...)
$password = crypt($_POST['password'], '$2a$12$'.$salt); 或者(我还需要数据库中的$salt ...)
$password = hash('sha512',$salt.$_POST['password']);发布于 2011-08-14 18:41:59
microtime作为盐的随机种子,可能会使您受到一些高级攻击,而更多的随机值可以防止这些攻击。我推荐phpass,这是一个很好的密码散列系统的现有实现。
http://www.openwall.com/phpass/
发布于 2011-08-14 22:16:38
别把你的盐弄得那么烂。
crypt的Blowfish散列需要一个22个字符的base64编码字符串(使用字符./0-9A-Za-z)作为盐,这相当于128位的熵。
你用来创建盐的SHA-512散列有512位的熵。但是,由于crypt现在只使用22个小写的十六进制字符,因此您将丢弃其中的80%以上。这让你只剩下大约85位的熵,尽管你正在做所有奇特的随机生成。
如果85位对你来说已经足够了,你不妨这样做:
$salt = str_replace("+", ".", base64_encode(md5(uniqid(mt_rand(), true), true)));我真的不敢给你任何关于如何生成使用完整128位的salt的建议,因为我不是密码学专家。
发布于 2011-08-14 18:48:41
实际上,增加这么多安全性是没有意义的。你必须知道你的系统是用来做什么的。如果只是聊天,那么你可以使用md5。如果它的银行系统,那么你必须有一些真正的身份验证系统,我的意思是一些带有盐或代码生成器的卡。
编辑:我不认为有一个好的安全策略。上面的答案是很棒的,思想。
https://stackoverflow.com/questions/7056233
复制相似问题