如何在PHP5.6中进行crypt和password_散列

如何在PHP5.6中进行crypt和password_散列,php,crypt,password-hash,Php,Crypt,Password Hash,您好,有人能告诉我如何在PHP5.6中使用crypt()和密码\u散列吗? 因为我试过了,它一直给我这个错误 注意:crypt():未指定salt参数 必须使用随机生成的salt和强散列函数来生成安全散列 用法非常简单,下面的示例对其进行了总结: // Hash a new password for storing in the database. // The function automatically generates a cryptographically safe salt. $ha

您好,有人能告诉我如何在
PHP5.6
中使用
crypt()
和密码\u散列吗? 因为我试过了,它一直给我这个错误

注意:crypt():未指定salt参数


必须使用随机生成的salt和强散列函数来生成安全散列

用法非常简单,下面的示例对其进行了总结:

// 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\u hash()
函数实际上是
crypt()
函数的包装器,用于处理诸如生成安全盐之类的困难部分,并使其经得起未来的考验。因此无需直接调用crypt()。

函数声明如下:

string crypt ( string $str [, string $salt ] )
但请注意:

salt
参数是可选的。但是,
crypt()
创建了一个没有
盐的弱密码。PHP5.6或更高版本在没有它的情况下发出
E_通知
错误。确保指定一种足够强的盐,以提高安全性

也就是说,如果您想继续使用函数而不使用salt(这将是愚蠢的),或者使用salt,那么您只需忽略该通知

但是,请注意,文档中继续说明:

password\u hash()
使用强散列,生成强salt,并自动应用正确的轮数
password\u hash()
是一个简单的
crypt()
包装器,与现有密码哈希兼容鼓励使用
密码\u散列()


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

只需使用默认值的
密码\u hash()
。它生成一个安全的salt,并使用给定PHP版本(当前为bcrypt)可用的最安全的哈希算法
password\u hash()
本质上只是
crypt()
的一个包装器,具有安全默认值,因为几乎没有人知道如何正确使用该函数。你真的不应该在密码哈希上使用你自己的盐,你真的应该使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用
密码\u hash()
@RyanVincent crypt提供的bcrypt实现。是的,它只是在内部包装crypt。如果不对
crypt()
函数提供一个salt,那将是致命的,然后它会计算一个单独的、非salt的DES或MD5哈希,这几乎与存储明文相同。但是正如您所写的,没有理由直接调用crypt()函数。