随机字符串vs散列和盐渍字符串

时间:2015-03-19 18:26:08

标签: hash passwords salt

假设我想创建一个纯粹随机的密码,将其称为大小为32个字符的randPass

在直接使用密码作为密码的安全性方面是否有任何优势,而不是哈希和盐化它(如md5(randPass + salt)

我的意思是在一天结束时,他们都是一个32个字符长的随机字符。

这是一个虚拟的例子:

salt = SFZYCr4Ul1zz1rhurksC67AugGIYOKs5;
randPass = VgQK1AOlXYiNwfe74RlU8e8E4szC4UXK;

然后md5(randPass + salt) = md5(VgQK1AOlXYiNwfe74RlU8e8E4szC4UXKSFZYCr4Ul1zz1rhurksC67AugGIYOKs5)变为

hash = dddbc2cbda808beeb7e64ce578ef4020

2 个答案:

答案 0 :(得分:1)

RANDOM salt的主要优点是你不能对哈希表运行字典攻击,因为每个密码应该有不同的盐,因此"密码"和盐" jfadljfadiufosd38120809321"变成" Passwordjfadljfadiufosd38120809321"这绝对不是在预先计算的字典md5哈希字典中,所以你不能进行反向查找并找出用户密码。

答案 1 :(得分:0)

通过使用哈希,您可以限制密码中的字符。

哈希字符包括:范围(0,9)和范围(' a',' f')。

更多角色更好。

如果要将密码提交到网页,则符号不应包含sql注入中常用的符号。 (例如",',%,\
要消除符号,请将range('!','@')更改为range('0','9')

设置允许的字符数和符号数的标准 该算法使用大写,小写,数字和符号 长度为32个字符。

$characters = array_merge(
range('a','z'),
range('A','Z'),
range('!','@'));
shuffle($characters);
shuffle($characters);
$characters = array_flip($characters);
$ndx = 33;
$pass = '';
while($ndx-->1){
  $pass .= array_rand($characters);
}
echo $pass;