我正在尝试创建一个用户必须使用名称/传递组合登录的应用。但是,我不完全确定在哪里检查用户名/密码是否有效。
每次运行应用程序时,我应该在显示登录屏幕之前刷新手机上的数据库副本吗?或者我应该在我验证登录信息后(通过https发送的帖子?)来拉取。
此外,我想知道在手机上存储包含用户名/密码组合的数据库的一部分的安全性。如果我用盐重复哈希密码,是否可以轻松查看用户名/密码组合?什么哈希算法是合适的? (md5很弱我读过,就像sha-1一样,但也许重复迭代它可以减轻sha-1的弱点?)。
答案 0 :(得分:0)
如果在用户使用登录之前或之后更新数据库,则取决于您的应用程序概念。我想提供的数据仅适用于拥有有效登录的用户,因此您只应在登录后加载/更新数据库。否则,用户可以下载您的应用程序,下载数据库并访问提供的数据,这些数据可能很复杂(我不知道内部存储了什么,因此您必须自行决定)
为什么要在手机上保存用户数据(登录)?只有在没有互联网的情况下运行应用程序才有意义,但这意味着您的应用程序必须在每部手机上存储所有用户的登录数据。这是一个可怕的想法。
您可以使用SHA-2作为密码,但在大多数情况下仍然可以使用盐渍md5。
答案 1 :(得分:0)
在更新数据库之前验证登录信息(通过某种HTTP方法)。如果您将任何凭据存储在手机的数据库中,那么没有登录的人可以使用有根电话访问您的数据。即使您对值进行散列,具有root电话的人也可以更改数据库中的内容等。
带盐的SHA-2是安全的好选择。
答案 2 :(得分:0)
几天前我做了这个过程。你有2个选择。 RESTful服务或通过json。
我通过httppost发送json然后散列密码并在php(服务器端)进行身份验证
问题在于,当您发送json时,您正在发送纯文本。这有一些技巧。您可以在Android应用程序上哈希密码并更改站点/数据库的整个逻辑以处理您选择的哈希或通过https发布。我会建议后者。取决于你更容易的事情
答案 3 :(得分:0)
对于问题的密码存储部分:
例如bcrypt,它基于Blowfish和PBKDF2,它基于像SHA-256这样的散列算法。
security.stackexchange.com上的这个问题涵盖了这两者的所有相关细节及其权衡。
Do any security experts recommend bcrypt for password storage?