我想与一些安全专家验证这一点。
我有一个注册用户的网络应用程序。我为每个用户使用唯一的盐对密码进行加密,并将散列后的密码存储到数据库中。
我现在需要从移动应用程序对用户进行身份验证。我不能使用 ssl,我更愿意避免在移动设备和我的网络服务器之间传递密码。因此,在服务器上调用登录方法(通过 RESTful API)之前,我更愿意在移动设备上 BCrypt 密码,然后通过 API 将其散列到服务器进行比较。
关键是在移动设备上我必须使用相同的盐进行 BCrypt(据我所知,我无法比较两个使用不同盐散列的 BCrypted pw)。
所以问题是:这样可以安全吗?
- 移动设备向服务器询问用户 X 的盐(我从数据库中存储的 pw 中得到前 22 个字符加上偏移量)
- 在移动设备上,我 BCrypt 在第 1 点得到的带有盐的密码
- 最后手机在服务器上调用 login(username, hashedpw)。
如前所述,所有通信都通过普通的 http,没有 SSL。
这有意义吗?