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

最佳答案

this question。您应该了解散列在客户端的含义:
亲:你可以使用更多的回合,创建一个更强的散列。
作为参考,1Password至少使用25000发PBKDF2-HMAC-SHA512。您的用户可能不会使用diceware,因此如果可能,您需要更高的计数。
你把自己锁在一个特定的算法里了&轮数。
哈希输出实际上将成为用户的密码。你以后就不能再调整了。这意味着随着时间的推移,随着计算能力的增加,散列值会变弱。
另外,由于散列允许访问您的网站,所以它应该存储在密钥链中。
使用盐(appname + username例如)应防止server breach影响任何其他部位。
正如链接中提到的,您可能仍然希望在服务器上使用“快速”散列(例如SHA-512)。如果只有数据库被破坏,这就限制了损害。
在服务器上,哈希值应在恒定时间内与hash_equals进行比较。password_compat对于早期版本的PHP具有code
defuse建议在使用客户端散列时在服务器端使用随机salt。
另一种更常见的方案是在服务器上执行所有散列。
对于PHP,请参见password_hashpassword_verifypassword_needs_rehash
如果您使用的是较旧版本的PHP,则存在password_compat

07-24 09:38
查看更多