我的PHP安全算法是否有效存储用户凭据?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了我的PHP安全算法是否有效存储用户凭据?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题是关于我遇到的特定编程问题 – 我想确保我的代码(和软件算法)足以在数据库中存储用户凭据.
// Get a 32 character salt like '69Mt6nexL1rsjWnu011S53MpB/WmT4Vl'
$passwordsalt = Security::generateBase64Salt();

$user = new User();
$user->setUsername($_POST['username']);

// $_POST['password'] comes in as a 128 character string
// Client side javascript is used to sha512 the string before sending IT over POST
// see http://pajhome.org.uk/crypt/md5/
// This prevents novice eavesdropPErs From capturing the raw password in plaintext
$user->setPassword(
    hash('sha512',$passwordSalt.$_POST['password'])
);
$user->setPasswordSalt($passwordSalt);
$user->save();

这是特定密码的数据库条目:@H_406_4@

密码:

69a78a7586a111b8a567b2d4f42f93f01fb59d337f7fa3c35949a66b246095778c1fa01ff4026abace476091e1e9a183bbdec1c31b12ce3f786921895c98CF6f

盐:

69Mt6nexL1rsjWnu011S53MpB / WmT4Vl

问题:

>这个算法有继承缺陷吗?
>将盐存储在与salt密码哈希相同的数据库和表中是否可以?
>如果表中有几十万用户,是否会有一个128字符的大密码导致登录性能问题(大小为几秒)?
>这些数据可以反转以生成原始密码吗?

为了娱乐:

如果您能使用salt和salt密码哈希向我提供原始密码,我将PayPal为5美元.

这个算法有继承缺陷吗?

它不受彩虹攻击(由于随机盐). Sha512是一个相当新的算法,但目前没有已知的碰撞,所以它可能非常安全.存储密码的方式很好.检查过程也很重要(速率限制暴力攻击)并锁定服务器免受可能试图访问数据库的其他角度的攻击.如果攻击者能够访问数据库,他可能会很快提取简单的密码,但任何复杂的密码都可能超出简单的暴力攻击(即使他可以直接访问哈希).

是否可以将salt存储在与salt密码哈希相同的数据库和表中?

如果你想能够验证密码(我假设你想要),你几乎必须将它们存储在一起.腌制密码的主要原因是消除彩虹攻击的可能性.通常,这些数据甚至与散列密码存储在同一列中,使用符号将它们分开.

如果表中有几十万用户,那么拥有一个128字符的大密码会导致登录性能问题(数秒级)吗?

基准测试密码需要多长时间(以秒为单位)(哈希(‘sha512’,$salt.$password_attempt)).找到该数字的倒数,这可能接近每cpu核心每秒可以处理的密码尝试次数.

这些数据可以反转以生成原始密码吗?

是的,但这需要很多努力,因为你使用随机盐,彩虹表将不再工作,并且sha512需要相当数量cpu来运行并且没有已知的冲突.如果密码相当简单,可能会猜到.如果你担心扭转哈希值,那么对密码的复杂性设置一个低限可能是一个好主意(根据字典检查它,它是否包含上/下/数字/符号).

脚本宝典总结

以上是脚本宝典为你收集整理的我的PHP安全算法是否有效存储用户凭据?全部内容,希望文章能够帮你解决我的PHP安全算法是否有效存储用户凭据?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。