我应该在将用户密码发送到服务器之前对其进行加密吗?

时间:2019-12-10 16:19:29

标签: android security

我想通过允许用户创建用户名和密码来对用户进行身份验证。由于我只找到有关它的旧文章,因此我正在创建此文章。

在发送到服务器之前,我应该对密码进行加密吗?如果是这样,我该怎么办?如果没有,我应该在对服务器的POST请求中使用一些特定的配置吗?

我应该使用任何可靠的第三方api吗?

我知道Google对此有一个androidx API,但它仍处于Alpha状态。

3 个答案:

答案 0 :(得分:3)

如果您使用HTTPS协议与服务器通信,则数据在发送前已被加密,无论如何,我建议您使用Cipher进行其他加密。

PS看到此问题以了解更多How to encrypt String in Java

答案 1 :(得分:1)

您可能会做出诸如Base64之类的基本混淆,就像Marco提到的那样,HTTPS已经确保了通道的安全,中间的人不会看到信息。

除了加密之外,您还可以添加安全性验证,以确保HTTPS证书是受信任的,因此也禁止使用代理(例如Charles Proxy)。

答案 2 :(得分:1)

加密采用需要安全分发的加密密钥。由于需要将密码(或密码的衍生物)存储在服务器端以进行后续身份验证,因此我建议至少在注册用户名/密码时以明文形式发送密码。当然,假设使用HTTPS强制执行安全协议和主机名验证。这样做的好处是,您无需向服务器API的特定算法添加隐式依赖关系。相反,当在数据库中存储密码(或派生密码)时,服务器应用程序可以将其隐藏为内部详细信息。这样一来,API的开发就不会那么痛苦。

通常建议使用证书固定(即,对服务器证书客户端进行“硬编码”),但由于您需要用到证书生命周期管理,因此根据您的使用情况,这可能会过度设计。

所有这一切。至少在短期内,您可能会受益于使用第三方服务(例如AWS Cognito)进行身份验证。这样,您可以在创建帐户,防止登录滥用,密码恢复等时更轻松地实施两要素身份验证