我正在开发一个安卓客户端(未来可能会有iOS、web门户等),并使用php mysql服务器。目前我在服务器端使用PHPass库对输入密码进行哈希和盐值加密。
客户端是否应该通过HTTPS/SSL发送明文密码,还是应该先对密码进行某种形式的哈希。例如,每个客户端是否都应该对每个输出的密码进行sha1(或其他算法)哈希处理?
客户端是否应该通过HTTPS/SSL发送明文密码,还是应该先对密码进行某种形式的哈希。例如,每个客户端是否都应该对每个输出的密码进行sha1(或其他算法)哈希处理?
Authorization: Basic <credentials>
你会使用
Authorization: Digest <credentials>
这是一种通过避免以明文形式发送密码来增加安全性的算法。那时,TLS/SSL会带来性能成本,因此这是一种替代方案。然而,该算法意味着密码必须以明文形式存储在服务器上。因此,您可以选择发送明文密码但在服务器上具有哈希值,或者将密码作为哈希发送但在服务器上具有明文。
不出所料,正如martinstoeckli在他的答案中所说,现在TLS/SSL已经广泛使用且易于实现,因此改用HTTPS。您可以在服务器上将密码存储为哈希值,但如果被MITM攻击者拦截,则不会暴露明文密码。