iOS -密码加密在Swift



我需要在Swift加密密码并将其发送到我的web服务器以存储在数据库中。有什么最佳实践吗?我见过AESCrypt.encrypt(userPassword, password: API_AUTH_PASSWORD),但我不确定这是否足够(盐等)。此外,在服务器本身上,如何比较用于登录身份验证的散列密码?我正在使用PHP。基本上,我想问的是,在Swift中是否有一种普遍接受的加密方法来对基于php的web服务器上的密码进行哈希和检查。

看这个问题。您应该理解哈希在客户端的含义:

  • Pro:你可以使用更大的轮数,创建一个更强的哈希。

    作为参考,1Password至少使用25000轮PBKDF2-HMAC-SHA512。您的用户可能不会使用diceware,所以如果可能的话,您需要更高的计数。

  • Con:你将自己锁定在一个特定的算法中&圆的计算。

    哈希输出实际上将成为用户的密码。你以后就不能再调整了。这意味着随着时间的推移,随着计算能力的增加,哈希值会变弱。

    此外,由于哈希授予访问您的网站,它应该存储在Keychain中。

    使用盐(例如appname + username)应该防止服务器破坏影响任何其他站点。

    正如链接所提到的,您可能仍然希望在服务器上使用"快速"哈希(例如SHA-512)。这限制了只有数据库受到损害时的损害。

    在服务器上,应该以恒定的时间与hash_equals比较哈希值。password_compat有早期PHP版本的代码。

  • 在使用客户端散列时,建议在服务器端使用随机盐。

可选的&更常见的场景是在服务器上执行所有哈希。

对于PHP,请参见password_hash, password_verify, password_needs_rehash

如果你使用的是旧版本的PHP,有password_compat.

最佳做法是不要将密码存储在数据库中。

您应该执行单向散列函数,例如SHA,并存储散列值。当需要对用户进行身份验证时,对用户输入的密码进行散列,并比较散列后的值。在散列中使用盐值可以进一步提高安全性。

相关内容

  • 没有找到相关文章

最新更新