首页 文章

加密(用盐)md5-hashed-password(php)的陷阱

提问于
浏览
1

客户端拥有庞大的用户群,我需要以安全的方式加密/散列密码 . 问题是我不能要求每个用户更改他们的密码,并且密码已经使用md5()而没有盐进行哈希处理 . 这样做的一种方法是使用salt加密当前密码,当用户更改或重置密码时,我只需用盐加密密码即可 .

这样做是否存在任何陷阱或或多或少的明显危险[我的意思是sha1(带盐的md5(密码)]]?

感谢您的时间

3 回答

  • 2

    这取决于你试图防御的攻击 . 如果攻击是查看数据库的人,则可以使用对称加密方法(如AES)和在数据库外部定义的密钥 . 使用此方法需要身份验证过程知道加密密钥,并通过使用加密密钥加密散列密码来更新数据库中的所有行 .

    如果以上不是一个选项,则有问题 . ;) 问题是,现在你实际上没有't know what any user'的密码 . 你所拥有的只是哈希版本 . 验证登录的例程是获取用户提供的输入,对其进行哈希处理,并将计算出的哈希值与存储的哈希值进行比较 .

    您可以选择存储旧哈希并创建一个新字段来存储新算法 . 然后当人们登录系统时,执行升级的salted-hash并删除旧的哈希 . 这将按预期工作,但如果一个人从未重新登录(或更改其密码),他们将永远不会升级到哈希的盐渍版本 .

    我个人的意见是使用AES加密选项,因为这可以防止随意查看散列密码,它涵盖了数据库中的所有密码 .

  • 3

    在用户表中添加一个新字段,用于存储新的安全散列密码 - 为此,请执行一些安全的操作,包括每用户盐和多轮 . 检查其他人正在做什么(即,bcrypt),而不是自己滚动 .

    在进行密码检查时,如果newPass字段为null,请使用旧密码查找,但敦促用户在进行身份验证后重置密码 .

    修改当前(旧)密码方案为hash(perUserSalt existingPassWordHash)应该可以正常工作 .

  • 1

    如果你打算使用 sha1(md5(password).$salt) 就可以了 .
    您可以进一步使用此系统 . 用户更改密码时无需采取任何特殊操作 . 只需加密它: sha1(md5(new password).$salt)

相关问题