【问题标题】:What are some good methods for hashing passwords in an Android app?在 Android 应用程序中散列密码有哪些好方法?
【发布时间】:2011-11-29 15:02:43
【问题描述】:

我正在创建一个应用程序,该应用程序要求用户在远程服务器上注册,但我想在将其密码发送到我的数据库之前对其进行哈希处理。

我尝试使用 jBCrypt 库,但它在散列时产生了很长的挂起时间。还有其他选择吗?在不造成明显挂起的情况下散列密码的最佳(和最安全)方法是什么?

【问题讨论】:

  • @DanielA.White:这不需要我拥有有效的 SSL 证书吗?我目前没有其中之一。
  • @WilHall 更不用说,SSL 证书很贵。

标签: android passwords


【解决方案1】:

您的方法似乎是错误的。除非您有一些特殊要求,否则执行此操作的常用方法如下(不是 Android 特定的,适用于任何 Web 应用程序):

  1. 当用户注册时,获取他们的密码,对其进行哈希处理(也推荐使用随机盐),并将其保存在数据库中。这样做是为了不将实际密码保存在数据库中。
  2. 当用户需要登录时,您将实际密码发送到您的 web 应用程序(使用 SSL 避免以明文形式发送),不是哈希。 在服务器上,您应用与第 1 步相同的哈希算法,并将结果与​​数据库中的结果进行比较。如果它们相同,则用户提供了正确的密码。

简而言之,您应该在服务器上进行散列,而不是在 Android 设备上。

【讨论】:

  • 目前我在做的是: 注册:获取密码输入,散列,发送到服务器,存储。登录:获取密码输入,散列,发送到服务器,比较你是说我应该用SSL发送明文密码,然后在服务器上散列?我的域不需要 SSL 证书吗?
  • 是的。请注意,您现在所做的事情是不安全的:如果有人拦截了流量,他们会得到哈希值,而不是实际的密码,但他们并不真正需要它。只要攻击者拥有哈希值,他们就可以将其发送到您的服务器并在不知道密码的情况下成功登录。请使用 SSL。
【解决方案2】:

不惜一切代价避免保存第 3 方密码。保存它们被认为是网络钓鱼的一种形式。尝试保存身份验证令牌,而不是使用 OAuth 等方法获取的原始密码。

如果您确实需要向网络服务器上的数据库发送密码,只需使用 HTTPS。这将确保通过网络进行安全加密。然后,您可以根据需要在数据库中加密密码。这种方法还可以确保您的加密机制不在设备本身上,这样更容易受到攻击。

【讨论】:

    猜你喜欢
    • 2012-06-12
    • 2011-01-07
    • 2011-08-11
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多