0

我的 Web 应用程序使用 PHPcrypt()函数进行密码散列。我想使用 SHA256 算法,所以我相应地生成了用户的盐字符串。问题是我没有意识到我使用的服务器不支持 SHA256 ( CRYPT_SHA_256)。我刚刚将我的应用程序移到了另一台支持 SHA256 的服务器上,基本上我的用户都无法登录,因为他们的密码字符串和盐字符串生成的哈希值与前一个服务器上生成的哈希值不同。

您认为最好的解决方案是不要求每个用户更改密码?

提前谢谢你,我很感激任何有用的想法。

4

1 回答 1

0

实际上,该crypt()函数应该能够验证您现有的哈希值,即使它们不是您想要生成的 SHA-256。由于新密码 API 在内部使用 crypt() 函数,因此甚至应该可以使用新函数验证您的哈希值:

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

要生成新的哈希值,您应该使用新函数 password_hash(),它会自动创建一个安全的盐。甚至它计算 BCrypt 散列,而不是不适合散列密码的 SHA-256。

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
于 2014-11-07T11:45:50.237 回答