盐和胡椒密码是否算作96位加密?

时间:2013-03-09 16:54:57

标签: php security encryption passwords md5

我已经为盐和胡椒密码加密创建了这段代码。我认为这是一种加密密码的好方法,但这是什么级别的加密?

我首先想到'bit'部分是使用的字符长度,但我知道这是不正确的。这会是多少位加密?

PHP

function _h() {
  $result = "";
  $charPool = '0123456789abcdefghijklmnopqrstuvwxyz';
  for($p = 0; $p<32; $p++)
    $result .= $charPool[mt_rand(0,strlen($charPool)-1)];
  return md5(sha1(md5(sha1($result))));
}

$salt = _h();
$pepper = _h();
$pass = $salt.md5($salt.md5($_POST['password']).$pepper).$pepper;

更新

我知道这不是加密,所以我不能说这是加密的,而是哈希。是否有一个哈希密码,盐和胡椒的安全性足以保存密码?

2 个答案:

答案 0 :(得分:3)

您的方案存在很多问题来散列密码。

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

这些功能将解决以下问题:

  1. 他们使用缓慢适应性哈希函数(BCrypt),MD5对于哈希密码来说太快了。
  2. 他们从操作系统的随机源生成安全的盐。
  3. 辣椒不仅仅是第二种盐,与盐相比,辣椒是秘密的,不会与哈希一起储存。所有密码通常都使用相同的胡椒。

答案 1 :(得分:1)

salt$peppr的计算过于复杂化是没有用的。毕竟,任务不是检索最初用于生产这些香料的东西,而是追溯$_POST('a']的价值而你赠送 $salt$pepper作为前缀/后缀(否则您无法使用存储的valuelater 验证此哈希的输入密码)。话虽如此,请像@zneak一样评论并使用专家库函数。