Xcode salting和哈希密码

时间:2015-06-05 11:46:40

标签: hash passwords salt

我有一个iPhone应用程序需要用户注册才能使用它。我抓住包括密码在内的常用信息。 我正在将用户注册详细信息保存到我的服务器,我正在加密,方法是在密码前加上一个盐字符串,然后对结果进行散列。

#define 用于预先添加所有passwods的salt字符串,但我读到salt应该是每个新密码的随机生成的字符串。

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

当我在注册时保存密码时,salted / hashed值将被发送到服务器上的数据库,并保存在"密码"列。

现在假设用户注销,然后尝试使用他们保存的密码重新登录。 他们输入了他们的密码,然后我加密并散列密码进行发送,它进入数据库检查并且它不匹配任何密码,因为登录密码用新的随机盐串进行盐渍/散列。

我该如何处理这个问题,还是让这个过程混乱?

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

1 个答案:

答案 0 :(得分:2)

今天的password_hash()函数通常在生成的哈希值中包含salt明文。这样,您就可以将hash和salt存储到同一个数据库字段中。

$2y$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |                     |
 |  |  |                     hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |
 |  |  salt = nOUIs5kJ7naTuTFkBy1veu
 |  |
 |  cost-factor = 10 = 2^10 iterations
 |
 hash-algorithm = 2y = BCrypt

为了验证,他们提供了password_verify()函数,该函数将从存储的哈希值中提取salt,并使用相同的salt来哈希登录密码。这两个哈希值可以比较。

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