如何在php 5.6中执行crypt和password_hash

how to do crypt and password_hash in php 5.6

嗨,有人能告诉我如何使用crypt()php 5.6中的密码hash吗?因为我试过了,它一直给我这个错误

Notice: crypt(): No salt parameter was specified.

必须使用随机生成的salt和强哈希函数来生成安全哈希。


用法是非常直接的,下面的例子总结了它:

1
2
3
4
5
6
7
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);

// 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()函数实际上是围绕crypt()函数的一个包装器,用于处理诸如生成安全盐之类的困难部分,并使其成为未来的证据。所以不需要直接调用crypt()。


函数声明如下:

1
string crypt ( string $str [, string $salt ] )

但文件指出:

The salt parameter is optional. However, crypt() creates a weak password without the salt. PHP 5.6 or later raise an E_NOTICE error without it. Make sure to specify a strong enough salt for better security.

也就是说,如果您想继续使用不含盐的函数(这将是愚蠢的),或者使用盐,则只需忽略通知。

但是,请注意,文档继续这样说:

password_hash() uses a strong hash, generates a strong salt, and applies proper rounds automatically. password_hash() is a simple crypt() wrapper and compatible with existing password hashes. Use of password_hash() is encouraged.

(最后一个重点是我的。)