首页 > 解决方案 > 如何在 Android 客户端和服务器端应用程序之间安全地发送密码?

问题描述

我当前的 Android 应用程序要求用户使用用户名和密码登录。

Android 应用程序调用 REST Web 服务进行用户登录,我不想以明文形式传输密码。

如何保护我的用户密码,以便服务器端可以识别/验证每个用户?

我目前正在尝试使用 Jasypt 库,如下所示:-

ConfigurablePasswordEncryptor passwordEncryptor = new ConfigurablePasswordEncryptor();
passwordEncryptor.setAlgorithm("SHA-1");
passwordEncryptor.setPlainDigest(true);
String encryptedPassword = passwordEncryptor.encryptPassword(userPassword);
...
if (passwordEncryptor.checkPassword(inputPassword, encryptedPassword)) {
  // correct!
} else {
  // bad login!
}

但是我的服务器端是用 .NET 编写的,据我了解 Jasypt 文档,密码加密器使用随机盐。

如何让我的服务器端代码与我发送的散列用户密码匹配?

我所有的网络服务都有 HTTPS 端点,这是否保证在交换访问令牌时没有人可以“看到”我的用户密码“在飞行中”?

标签: android.netpassword-hashjasypt

解决方案


你必须小心你所做的事情。考虑实现一个常见的双因素密钥共享算法,例如TOTP客户端散列
是一个非常罕见但非常好的做法。这当然不会阻止黑客登录用户的帐户,但会阻止他们获取可能重复使用的纯文本密码。我建议在重置密码公式 下更改电子邮件和密码,这样需要电子邮件/短信确认。最后,当您这样做时,登录发生的连接是安全的,例如 https/tls,这一点非常重要。


推荐阅读