繁体   English   中英

iOS-Swift中的密码加密

[英]iOS - Password Encryption in Swift

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

看到这个问题 您应该了解客户端的哈希含义:

  • 优点:您可以使用更多的回合,创建更强的哈希。

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

  • 缺点:您将自己锁定在特定的算法和轮数中。

    哈希输出实际上将成为用户的密码。 您以后将无法进行调整。 这意味着随着计算能力的提高,哈希值随着时间的推移会减弱。

    另外,由于散列允许访问您的网站,因此应将其存储在钥匙串中。

    使用盐(例如,应用程序appname + username )应该可以防止服务器漏洞影响其他任何站点。

    正如链接所提到的,您可能仍希望在服务器上使用“快速”哈希(例如SHA-512 )。 如果仅数据库受到威胁,这将限制损坏。

    在服务器上,哈希值应与hash_equals进行恒定比较。 password_compat代码为早期版本的PHP。

    defuse建议在使用客户端哈希时在服务器端随机添加盐。

另一种常见的方案是在服务器上进行所有哈希处理。

对于PHP,请参见password_hashpassword_verifypassword_needs_rehash

如果您使用的是旧版本的PHP,请输入password_compat

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM