我正在尝试使用Mcrypt的mcrypt_create_iv()
生成盐,但它似乎不起作用而且我遇到了错误。
这是我的代码:
<?php
$salt= substr(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM))(mt_rand()),0,22);
echo $salt;
?>
答案 0 :(得分:1)
$salt = substr( mcrypt_create_iv(16, MCRYPT_DEV_URANDOM), mt_rand( 0, 22 ) );
你有一些语法错误
答案 1 :(得分:1)
这不起作用,您使用mcrypt_create_iv()
来获取随机字节,但这些不能用于BCrypt的散列。问题是,mcrypt_create_iv返回二进制数据,而BCrypt需要一个具有给定字母表字符的salt。您必须将盐编码为此字母:./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
。函数mt_rand()
在这里没用。
PHP 5.5将自己的函数password_hash()和password_verify()准备好,以简化生成BCrypt密码哈希值。我强烈建议使用这个优秀的api,或者compatibility pack用于早期的PHP版本。用法非常简单:
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
// 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);