【问题标题】:Android Password HashingAndroid密码哈希
【发布时间】:2018-01-31 03:44:46
【问题描述】:

我不知道我是否做对了,但在我看来,没有人整理过一些关于如何在 Android 上正确地加盐和散列密码以创建简单登录机制的指南。

我只是想出了这个,因为我想制作一个相当简单的(?)Android 应用程序,涉及 Web API 访问的用户身份验证。

我似乎在适当的 BCrypt/SHA256 库上找不到任何解决方案...

我找到了一个提供 BCrypt 的 Java 库,但是当我真正执行哈希函数时,我的 Android 似乎由于可用资源不足而死机。 Facebook/Twitter/Snapchat 等使用什么样的密码加密?

我永远不会发送这样的参数纯文本!

【问题讨论】:

  • 您应该通过 https 以纯文本形式发送密码。见this post
  • 加盐和散列在执行身份验证的系统上完成。在您的环境中,是 Android 设备执行身份验证,还是某个服务器执行身份验证?
  • 如果您确实需要使用 BCrypt,因为您发现它的计算量非常大。最好的做法是在后台线程上执行此操作并显示进度或其他一些 UI 以向用户指示他们应该等待。
  • 那么......所以用户必须真正信任服务器所有者?从某些角度来看,这非常具有讽刺意味。
  • 一般做法是将HTTPS post数据中的明文密码发送到服务器。在服务器上,使用了特定于密码的散列方法,需要约 100 毫秒的 CPU 时间,NIST 建议使用 PBKDF2,对于 PHP,password_hashpassword_verify 是一种安全方法。正如 NIST 所建议的那样,通过不允许使用众所周知的密码,可以获得更高的安全性。除此之外,风车倾斜很可能会降低安全性。

标签: android authentication hash login passwords


【解决方案1】:

有很多不同的方法,但最方便的方法是通过 HTTPS 将密码发送到您的服务器,然后您的实际哈希应该在服务器上完成,因此哈希是一个消耗 CPU 的操作。

但是您可以实现另一种方式,在这种情况下,您在客户端(移动设备)执行散列函数,然后将散列值发送到服务器,您可以选择再次散列散列密码以使其均匀更安全,但请记住在客户端散列您的密码可能会给您的用户体验留下深刻印象,您最好以适当的方式处理它。

所以你可能会猜到没有单向规则,它实际上取决于你的选择。

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2023-04-08
    • 2015-11-30
    • 2020-04-19
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多