我正在处理一个宠物项目,我想添加用户注册支持。经过一番研究,我决定在我的数据库中保存散列密码和盐,而不是原始密码。但是,我对步骤是什么以及顺序感到困惑。以下是我的假设:
注册
- 客户端将用户名和密码发送到服务器(https)
- 服务器抓取密码,生成随机盐
- Base64 编码盐
- 使用 stringify salt 对密码进行哈希处理
- Base64 编码密码
- 将密码和盐保存到数据库中
登录
- 客户端将用户名和密码发送到服务器(https)
- 服务器获取用户名和密码,从数据库中查找散列 psw 和 salt
- 使用盐的哈希密码,base64 编码结果
- 将密码与数据库中的散列 psw 进行比较
- 如果匹配,则验证用户
我正在实施我的系统作为我的假设,并且一切似乎都有效。但是我不确定 base64 编码部分。将密码和盐从二进制编码为字符串的目的是什么,我可以跳过这一步吗?如果我假设的过程是错误的,那么正确的步骤是什么?
PS我使用express.js作为服务器,mysql作为数据库