在Android应用程序中,有哪些好的密码哈希方法?

在Android应用程序中,有哪些好的密码哈希方法?,android,passwords,Android,Passwords,我正在创建一个应用程序,要求用户向远程服务器注册,但我想在发送密码并将其存储在我的数据库之前对其进行哈希运算 我尝试使用jBCrypt库,但它在散列时造成了很长的挂起时间。还有其他选择吗?在不造成明显挂起的情况下散列密码的最佳(也是最安全)方法是什么?避免不惜一切代价保存第三方密码。保存它们被认为是一种网络钓鱼。尝试保存身份验证令牌,而不是使用OAuth之类的方法获得的原始密码 如果您确实需要向Web服务器上的数据库发送密码,只需使用HTTPS即可。这将确保通过电线进行安全加密。然后可以根据需要

我正在创建一个应用程序,要求用户向远程服务器注册,但我想在发送密码并将其存储在我的数据库之前对其进行哈希运算


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

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


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

您的方法似乎是错误的。除非您有一些特殊要求,否则通常的做法如下(对于任何web应用程序,不是特定于Android):

  • 当用户注册时,获取他们的密码,对其进行散列(建议使用随机salt),并将其保存在数据库中。这样就不会在数据库中保存实际密码
  • 当用户需要登录时,您将实际密码发送到您的webapp(使用SSL避免以明文形式发送),而不是散列。在服务器上,应用与步骤1相同的哈希算法,并将结果与数据库中的结果进行比较。如果它们相同,则表示用户提供了正确的密码
    简而言之,你应该在服务器上进行哈希运算,而不是在Android设备上。

    目前我正在做的是:注册:获取密码输入,对其进行哈希运算,将其发送到服务器,然后存储。登录:获取密码输入,散列,发送到服务器,比较你是说我应该用SSL发送明文密码,然后在服务器上散列?我的域不需要SSL证书吗?是的。请注意,您现在所做的是不安全的:如果有人截获流量,他们会得到哈希值,而不是实际密码,但他们并不真正需要它。只要攻击者拥有哈希,他们就可以将其发送到您的服务器并成功登录,而不需要知道密码。请务必使用SSL。@DanielA.White:这不要求我拥有有效的SSL证书吗?我目前没有这些证书。@WilHall更不用说,SSL证书很昂贵。