随机字符串与散列和加盐字符串
Random string vs hashed and salted string
假设我想创建一个完全随机的密码,将其命名为 randPass
,大小为 32 个字符。
就安全性而言,直接将其用作密码与散列和加盐相比是否有任何优势(如 md5(randPass + salt)
?
我的意思是在一天结束时,它们都是 32 个字符长的随机字符。
这是一个虚拟示例:
salt = SFZYCr4Ul1zz1rhurksC67AugGIYOKs5;
randPass = VgQK1AOlXYiNwfe74RlU8e8E4szC4UXK;
然后 md5(randPass + salt) = md5(VgQK1AOlXYiNwfe74RlU8e8E4szC4UXKSFZYCr4Ul1zz1rhurksC67AugGIYOKs5)
变成
hash = dddbc2cbda808beeb7e64ce578ef4020
随机盐的主要优点是你不能运行对散列table的字典攻击,因为每个密码应该有不同的盐,因此"Password"和盐"jfadljfadiufosd38120809321" 变成 "Passwordjfadljfadiufosd38120809321" ,这绝对不在预先计算的字典 md5 哈希字典中,因此您无法进行反向查找并找出用户密码。
通过使用哈希,您限制了密码中的字符。
散列字符为:range(0,9) and range('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;
假设我想创建一个完全随机的密码,将其命名为 randPass
,大小为 32 个字符。
就安全性而言,直接将其用作密码与散列和加盐相比是否有任何优势(如 md5(randPass + salt)
?
我的意思是在一天结束时,它们都是 32 个字符长的随机字符。
这是一个虚拟示例:
salt = SFZYCr4Ul1zz1rhurksC67AugGIYOKs5;
randPass = VgQK1AOlXYiNwfe74RlU8e8E4szC4UXK;
然后 md5(randPass + salt) = md5(VgQK1AOlXYiNwfe74RlU8e8E4szC4UXKSFZYCr4Ul1zz1rhurksC67AugGIYOKs5)
变成
hash = dddbc2cbda808beeb7e64ce578ef4020
随机盐的主要优点是你不能运行对散列table的字典攻击,因为每个密码应该有不同的盐,因此"Password"和盐"jfadljfadiufosd38120809321" 变成 "Passwordjfadljfadiufosd38120809321" ,这绝对不在预先计算的字典 md5 哈希字典中,因此您无法进行反向查找并找出用户密码。
通过使用哈希,您限制了密码中的字符。
散列字符为:range(0,9) and range('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;