【发布时间】: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_hash和password_verify是一种安全方法。正如 NIST 所建议的那样,通过不允许使用众所周知的密码,可以获得更高的安全性。除此之外,风车倾斜很可能会降低安全性。
标签: android authentication hash login passwords