首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机salt +散列传递还是随机salt +crypt()传递?

随机salt +散列传递还是随机salt +crypt()传递?
EN

Stack Overflow用户
提问于 2011-08-14 18:18:43
回答 3查看 972关注 0票数 2

我正在尝试为我的网站做一个或多或少安全的登录系统,我还没有太多的时间来保护东西,所以我正在学习。我想听听你对以下哪一个更好以及为什么更好的看法。(或者我在什么地方弄错了?)

代码语言:javascript
复制
$staticsalt = '$%*#)$*)^A#$#543667ggfdf\#$%x';  
$random = md5(uniqid(mt_rand(), true));
$salt = hash('sha512',$random.$_POST['password'].microtime().$staticsalt);

任一(在数据库中不需要$salt的地方...)

代码语言:javascript
复制
$password = crypt($_POST['password'], '$2a$12$'.$salt);   

或者(我还需要数据库中的$salt ...)

代码语言:javascript
复制
$password = hash('sha512',$salt.$_POST['password']);
EN

回答 3

Stack Overflow用户

发布于 2011-08-14 18:41:59

  1. SHA512是一个相当快的算法,对于密码散列来说,这通常是一个不受欢迎的属性,因为一个可预测的值,例如microtime作为盐的随机种子,可能会使您受到一些高级攻击,而更多的随机值可以防止这些攻击。

我推荐phpass,这是一个很好的密码散列系统的现有实现。

http://www.openwall.com/phpass/

票数 3
EN

Stack Overflow用户

发布于 2011-08-14 22:16:38

别把你的盐弄得那么烂。

crypt的Blowfish散列需要一个22个字符的base64编码字符串(使用字符./0-9A-Za-z)作为盐,这相当于128位的熵。

你用来创建盐的SHA-512散列有512位的熵。但是,由于crypt现在只使用22个小写的十六进制字符,因此您将丢弃其中的80%以上。这让你只剩下大约85位的熵,尽管你正在做所有奇特的随机生成。

如果85位对你来说已经足够了,你不妨这样做:

代码语言:javascript
复制
$salt = str_replace("+", ".", base64_encode(md5(uniqid(mt_rand(), true), true)));

我真的不敢给你任何关于如何生成使用完整128位的salt的建议,因为我不是密码学专家。

票数 0
EN

Stack Overflow用户

发布于 2011-08-14 18:48:41

实际上,增加这么多安全性是没有意义的。你必须知道你的系统是用来做什么的。如果只是聊天,那么你可以使用md5。如果它的银行系统,那么你必须有一些真正的身份验证系统,我的意思是一些带有盐或代码生成器的卡。

编辑:我不认为有一个好的安全策略。上面的答案是很棒的,思想。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7056233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档