jlm*_*kes 3 php passwords hash
我一直在关注PHP的crypt函数和Stackoverflow上的一些问题,而我正试图找出salted和hashed密码.
我在PHP社区页面上找到了这个:
<?php
function md5crypt($password){
// create a salt that ensures crypt creates an md5 hash
$base64_alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
.'abcdefghijklmnopqrstuvwxyz0123456789+/';
$salt='$1$';
for($i=0; $i<9; $i++){
$salt.=$base64_alphabet[rand(0,63)];
}
// return the crypt md5 password
return crypt($password,$salt.'$');
}
?>
Run Code Online (Sandbox Code Playgroud)
这样的事情与以下相比如何:
<?php
// Slightly modified example from PHP community page
$password = trim(mysql_prep($_POST['password']));
// Get the hash, letting the salt be automatically generated
$hashed_password = crypt($password);
?>
Run Code Online (Sandbox Code Playgroud)
以下是另一个问题的摘录:
但是,PHP crypt()函数可以使用各种不同的哈希值来计算哈希值.当您使用"$ 1 $"为盐添加前缀时,您将获得带有MD5的哈希值.当你用$ 2 $加前缀时,你会得到一个带有河豚的地穴,这样更安全.
"$ 1 $"以输出为前缀,以便验证散列.如果没有包含,则无法从存储的哈希中知道应该使用哪种算法!这些信息必须存储在其他地方.为了节省您的麻烦,PHP在哈希输出中包含了算法.
我的头脑有点关于哈希,加密和盐...但真正让我感到困惑的部分是,我如何比较一个用户输入password的salted hashed password,如果盐是在用户创建时随机生成的...而不是存储 - 最重要的是,如果你必须指定正确的前缀以便能够在用户返回时再次验证密码,那么将crypt()与自动盐一起使用有什么意义呢?
您需要与用户一起存储salt.
salt的目的是确保具有相同密码的两个用户获得不同的哈希值.
这可以防止彩虹表攻击.
编辑:您的盐应包含(加密安全)随机字节.
现在,您将其限制为仅包含字母和数字
| 归档时间: |
|
| 查看次数: |
1976 次 |
| 最近记录: |