Xcode盐和哈希密码



我有一个iPhone应用程序,需要用户注册才能使用。我获取通常的信息,包括密码。我将用户注册详细信息保存到我的服务器,我通过在密码前添加一个盐字符串来加密,然后对结果进行哈希。

#define一个salt字符串用于我所有的密码的前缀,但是我读到salt应该是每个新密码随机生成的字符串。

这一切都很好,我设法为每个密码生成一个唯一的字符串。

当我在注册时保存密码时,盐化/哈希值被发送到服务器上的数据库并保存在"password"列中。

现在假设用户注销,然后尝试使用保存的密码重新登录。他们输入了他们的密码,然后我对密码进行了盐化和哈希处理以发送,它到达数据库检查,它与任何密码都不匹配,因为登录密码被一个新的随机盐字符串盐化/哈希处理。

我该如何处理这个问题,还是我把这个过程弄混了?

我应该为每个新密码生成一个新的随机盐字符串,还是我只是为所有密码使用1个盐字符串?

现在的password_hash()函数通常在结果散列值中包含salt明文。通过这种方式,您可以将哈希和盐存储到相同的数据库字段中。

$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |                     |
 |  |  |                     hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |
 |  |  salt = nOUIs5kJ7naTuTFkBy1veu
 |  |
 |  cost-factor = 10 = 2^10 iterations
 |
 hash-algorithm = 2y = BCrypt
对于验证,他们提供了一个password_verify()函数,该函数将从存储的哈希值中提取盐,并使用相同的盐对登录密码进行哈希。这两个哈希值可以比较。

哈希应该在服务器端完成,通常密码是明文发送到服务器,用HTTPS/SSL加密。

相关内容

  • 没有找到相关文章

最新更新