当我想建立一个登录系统时,我总是将给定密码的MD5与服务器端用户表中的值进行比较.
然而,我的一个朋友告诉我,一个"清晰"的密码可能会被网络软件嗅到.
所以我的问题是:在客户端散列密码是个好主意吗?它比在服务器端散列更好吗?
我正在制作一个登录系统,当登录密码时,当前从 JavaScript 发送到一个 PHP 文件。
在 PHP 中,我使用以下代码进行哈希处理。
$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);
Run Code Online (Sandbox Code Playgroud)
在使用 POST 发送密码之前,我应该如何在 JavaScript 中散列密码?
我显然不想影响 BCRYPT 的安全性。
Wikipedia提供了以下基于 nonce 的身份验证示例:
客户端从服务器请求随机数。
服务器以随机数响应(即,以下称为“服务器随机数”)。
客户端使用服务器随机数、它自己的客户端随机数和用户输入的密码来生成哈希。
客户端将用户输入的用户名、客户端随机数和哈希发送到服务器。
服务器从其数据库中检索服务器随机数和用户密码,大概是通过用户名。
服务器结合服务器随机数、客户端随机数和密码来生成哈希。
服务器将刚刚生成的散列与客户端发送的散列进行比较。
如果哈希匹配,则客户端通过身份验证。如果不是,则客户端被拒绝。
这是否意味着服务器以纯文本形式存储用户密码?是否严重违反了建议保存密码的加盐哈希而不是实际密码本身的安全原则?