iOS - Swift中的密码加密

Rya*_*ski 0 php encryption passwords ios swift

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

小智 5

看到这个问题.您应该了解哈希对客户端的影响:

  • Pro:您可以使用更多轮次,创建更强的哈希值.

    作为参考,1Password使用至少25,000轮PBKDF2-HMAC-SHA512.您的用户可能不会使用diceware,因此如果可能,您将需要更高的计数.

  • Con:你将自己锁定在一个特定的算法和轮数.

    哈希输出实际上将成为用户的密码.您将无法在以后调整内容.这意味着随着时间的推移,随着计算能力的增加,哈希值会变弱

    此外,由于哈希授予访问您网站的权限,因此应将其存储在Keychain中.

    使用salt(appname + username例如)应防止服务器违规影响任何其他站点.

    正如链接所提到的,您可能仍希望SHA-512在服务器上使用"快速"哈希(例如).如果仅损坏数据库,则可以限制损坏.

    在服务器上,哈希应该在恒定的时间内进行比较hash_equals.password_compat代码的早期版本的PHP.

    当使用客户端散列时,defuse建议在服务器端使用随机盐.

替代和更常见的情况是在服务器上进行所有散列.

对于PHP,见password_hash,password_verifypassword_needs_rehash.

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

  • @itstrueimryan是的,使用HTTPS. (2认同)