正确使用盐来存储密码


Proper usage of salt for password storing

我对整个盐渍的东西很陌生。

假设我在配置.php中存储了(crypt($pass,$salt))的管理员密码。

现在我不认为在config.php文件中在我的(加密)密码正下方$salt一个随机字符串是个好主意,对吧?

我还没有找到一个教程可以告诉我应该在哪里储存我的盐,或者如何以智能的方式实际使用它。

另外,即使我的管理员是唯一的管理员,我是否应该将我的管理员登录详细信息存储在数据库中?

PHP 版本 5.1

<?php
//Admininstration
$ad_uname = "church"; #username
$ad_pass = "sj50sl3ZE8ABM"; #password: crypt("blablah", $salt)
$salt = "sjoirjoewtointontont"; #salt
?>

看看 PHP 的函数 password_hash(),它完全按照应有的方式解决了问题。盐作为生成的哈希值的一部分包含在内,并且是纯文本。盐的目的是防止彩虹表攻击。

您想到的是添加服务器端机密,这可以通过添加 pepper 或之后使用双向加密算法(除了加盐)加密哈希值来完成。困难在于,在哪里存储此密钥,如果攻击者已经拥有读取您的源代码的权限,他也将有权访问您的密钥(代码必须能够读取它)。如果您对这个主题更感兴趣,请看一下本教程。