如何将PHP crypt()函数与SHA256 salt字符串一起使用,以生成与SHA256不是';服务器上不支持?

如何将PHP crypt()函数与SHA256 salt字符串一起使用,以生成与SHA256不是';服务器上不支持?,php,login,sha256,crypt,password-hash,Php,Login,Sha256,Crypt,Password Hash,我的web应用程序使用PHPcrypt()函数进行密码哈希。我想使用SHA256算法,所以我相应地生成了用户的salt字符串。问题是我没有意识到我使用的服务器不支持SHA256(CRYPT\u SHA\u 256)。我刚刚将我的应用程序移动到另一个支持SHA256的服务器上,基本上我的用户都无法登录,因为他们的密码字符串和salt字符串生成的哈希值与前一个服务器上生成的哈希值不同 您认为最好的解决方案是什么,而不要求每个用户更改密码 提前感谢您,我非常感谢您提出的任何有用的想法。实际上,cryp

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

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

提前感谢您,我非常感谢您提出的任何有用的想法。

实际上,
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(),它将自动创建一个安全的salt。此外,它还计算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);

您不应该使用SHA散列密码。你也可以使用hash()函数。我可能错了,但据我所知,使用sha256算法的crypt()函数具有唯一用户salt,足以对密码进行哈希运算。无论如何,谢谢你的提示,但是无论我决定使用哪种散列方法,我仍然必须使用我的旧解决方案来访问那些没有更改密码的人。在提供的传入详细信息上使用旧方法。如果你找到一个匹配的,那么一切都好。如果不匹配,请尝试新方法…是的,应该可以,但是带有sha256格式salt的crypt()会根据是否支持sha256算法给出不同的结果。在新服务器上,它是受支持的,但不知何故,我应该得到哈希值,如果它不受支持,就会生成哈希值。