【发布时间】:2013-01-08 17:48:00
【问题描述】:
我正在处理一个宠物项目,我想添加用户注册支持。经过一番研究,我决定在我的数据库中保存散列密码和盐,而不是原始密码。但是,我对步骤是什么以及顺序感到困惑。以下是我的假设:
注册
- 客户端将用户名和密码发送到服务器 (https)
- 服务器抓取密码,生成随机盐
- Base64 编码盐
- 使用 stringify salt 对密码进行哈希处理
- Base64 编码密码
- 将密码和盐保存到数据库中
登录
- 客户端将用户名和密码发送到服务器 (https)
- 服务器获取用户名和密码,从数据库中查找散列 psw 和 salt
- 使用盐的哈希密码,base64编码结果
- 将密码与数据库中的散列 psw 进行比较
- 如果匹配,则验证用户身份
我正在实施我的系统作为我的假设,并且一切似乎都有效。但是我不确定 base64 编码部分。将密码和盐从二进制编码为字符串的目的是什么,我可以跳过这一步吗?如果我假设的过程是错误的,正确的步骤是什么?
P.S 我使用 express.js 作为服务器,mysql 作为数据库
【问题讨论】:
-
Base64 编码散列密码通常是为了更容易存储,特别是如果散列函数输出二进制。如果您有一个可以处理原始二进制文件的良好持久性方法,那么编码是无关紧要的。
-
@Joe 谢谢乔!所以一切都井井有条?
标签: mysql encryption hash cryptography