hash - Xcode 对密码进行加盐和散列处理

标签 hash passwords salt

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

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

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

当我在注册时保存密码时,加盐/散列值将发送到服务器上的数据库并保存在“密码”列中。

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

我该如何处理这个问题,或者我的流程是否困惑?

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

最佳答案

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

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

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

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

关于hash - Xcode 对密码进行加盐和散列处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30665761/

相关文章:

iPhone SDK : Storing username and password in the code

c - 哪个哈希函数在密码验证中是安全的?

javascript - 编写 JavaScript 邮政编码验证函数

ruby - 如何使用数组中的键初始化散列?

c# - MVC 4 - 更改密码错误 : "Index (zero based) must be greater than or equal to zero..."

javascript - 如何为长度为 8 - 24 的密码创建正则表达式并至少包含以下 3 个 : lowercase, 大写字母、数字、特殊字符

java - 我如何在 Spring Security 中检查加盐密码?

mysql - 如何将 GWT 与 Apache Shiro 散列和加盐一起使用

PHP & MySQL : using bcrypt hash and verifying password with database

java - 如何通过Java将字节数组插入到SQL中?