使用Mcrypt盐

时间:2013-05-16 22:16:39

标签: php salt

我正在尝试使用Mcrypt的mcrypt_create_iv()生成盐,但它似乎不起作用而且我遇到了错误。

这是我的代码:

<?php
$salt= substr(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM))(mt_rand()),0,22);

echo $salt;
?>

2 个答案:

答案 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);