安卓密码哈希化

3
我不确定我是否理解正确,但在创建一个简单的登录机制时,似乎没有人提出有关如何在Android上正确地进行密码加盐和哈希的指南。
我想出了这个方法,因为我想为Web API访问实现用户身份验证的相对简单的Android应用程序。
我似乎找不到任何适用于BCrypt/SHA256库的解决方案...
我找到了一个Java库提供了BCrypt,但是一旦我开始执行哈希函数,由于可用资源不足,我的Android似乎会冻结。Facebook/Twitter/Snapchat等使用什么样的密码加密方式?
我绝不会发送这样明文参数!

4
你应当通过 HTTPS 发送明文密码。参见这篇文章 - Orkhan Alikhanov
盐值加密和哈希是在执行身份验证的系统上完成的。在您的环境中,是Android设备执行身份验证,还是某个服务器执行身份验证? - CommonsWare
如果您确实需要使用BCrypt,就像您发现的那样,它在计算上非常密集。最好的方法是在后台线程上执行此操作,并显示进度或其他UI,以指示用户应该等待。 - Eric O'Connell
2
一般的做法是将明文密码通过HTTPS POST数据发送到服务器。在服务器上,使用特定于密码的哈希方法,需要约100毫秒的CPU时间,NIST推荐使用PBKDF2,对于PHP来说,password_hashpassword_verify是一种安全的方法。可以通过不允许使用众所周知的密码来获得更高的安全性,这也是NIST建议的。超出这个范围很可能会降低安全性。 - zaph
你需要开发一个威胁模型,即要保护的人员及其所需保护价值。你是在防范针对个别用户的网络钓鱼攻击还是那些想要获取批量用户凭据的攻击者?或者是那些想要获取服务器或用户数据的攻击者呢? - zaph
显示剩余8条评论
1个回答

0

有很多不同的方法,但最方便的方法是通过HTTPS将密码发送到服务器,然后在服务器上执行实际的哈希操作,因为哈希是一种消耗CPU的操作。

但是你可以实现另一种方式,在这种情况下,你可以在客户端(移动设备)上执行哈希函数,然后将哈希值发送到服务器,并且你可以选择再次对哈希密码进行哈希以使其更加安全,但请记住,在客户端上哈希密码可能会影响用户体验,你最好以适当的方式处理它。

因此,正如你可能猜到的那样,没有一种固定的规则,这实际上取决于你的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接