我正在处理一个宠物项目,我想要添加用户注册支持。经过一些研究后,我决定在我的数据库中保存哈希密码和盐,而不是原始密码。但是我对步骤是什么以及以什么顺序感到困惑。以下是我的假设:
注册
登录
我正在实施我的系统作为我的假设,一切似乎都有效。但是我不确定base64编码部分。将密码和salt从二进制编码为字符串的目的是什么,我可以跳过这一步吗?如果我假设的过程是错误的,那么正确的步骤是什么?
P.S我使用express.js作为服务器,mysql作为数据库
答案 0 :(得分:3)
一般的想法没问题,但我有一些评论:
因此该方案包含以下问题:
答案 1 :(得分:0)
您需要了解盐的含义。它只是为了使用彩虹表来对抗可能的暴力攻击。这意味着一些坏人将以高计算能力尝试所有可能产生的哈希值。然后尝试从这种哈希中提取纯文本 因此盐就是为了确保即使有这样的攻击,返回的纯文本也不正确。
例如: 用户名:“Xavier_Ex” 密码:“Ilovestackoverflow”
此类密码将被散列为“sfhj87s& ^ f”。现在彩虹表也可以说 “sfhj87s& ^ f” - > Ilovestackoverflow ... bleh,你的密码破解了。
但是当盐腌它时会像“Ilovestackoverflow” - > “IO * ves5tacmkove3rflow”。 当这是哈希“Io * ves5tacmkove3rflow” - > “dfgdfgdf”
使用彩虹表“dfgdfgdf”将返回“Io * ves5tacmkove3rflow”..您的密码仍然是秘密的。
简而言之......你可以跳过这个,除非你确实需要这样的保护。