我的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(); 这是特定密码的数据库条目: 密码: 69a78a7586a111b8a567b2d4f42f93f01fb59d337f7fa3c35949a66b246095778c1fa01ff4026abace476091e1e9a183bbdec1c31b12ce3f786921895c98cf6f 盐: 69Mt6nexL1rsjWnu011S53MpB / WmT4Vl 问题: >这个算法有继承缺陷吗? 为了娱乐: 如果您能使用salt和salt密码哈希向我提供原始密码,我将PayPal为5美元. 这个算法有继承缺陷吗?它不受彩虹攻击(由于随机盐). Sha512是一个相当新的算法,但目前没有已知的碰撞,所以它可能非常安全.存储密码的方式很好.检查过程也很重要(速率限制暴力攻击)并锁定服务器免受可能试图访问数据库的其他角度的攻击.如果攻击者能够访问数据库,他可能会很快提取出简单的密码,但任何复杂的密码都可能超出简单的暴力攻击(即使他可以直接访问哈希). 是否可以将salt存储在与salt密码哈希相同的数据库和表中? 如果你想能够验证密码(我假设你想要),你几乎必须将它们存储在一起.腌制密码的主要原因是消除彩虹攻击的可能性.通常,这些数据甚至与散列密码存储在同一列中,使用符号将它们分开. 如果表中有几十万用户,那么拥有一个128字符的大密码会导致登录性能问题(数秒级)吗? 基准测试密码需要多长时间(以秒为单位)(哈希(‘sha512’,$salt.$password_attempt)).找到该数字的倒数,这可能接近每CPU核心每秒可以处理的密码尝试次数. 这些数据可以反转以生成原始密码吗? 是的,但这需要很多努力,因为你使用随机盐,彩虹表将不再工作,并且sha512需要相当数量的CPU来运行并且没有已知的冲突.如果密码相当简单,可能会猜到.如果你担心扭转哈希值,那么对密码的复杂性设置一个低限可能是一个好主意(根据字典检查它,它是否包含上/下/数字/符号). (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |