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_verify和password_needs_rehash.
如果你使用的是旧版本的PHP,那就是password_compat.