为什么要在密码里加点“盐”
所谓加盐(Salt)方法,就是加点“佐料”。让密码破解起来更加困难;
盐(Salt)
在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。
以上这句话是维基百科上对于 Salt 的定义
如何在密码里加盐
现在很少系统会直接明文保存用户的密码了,至少也是会计算密码的 md5 后保存。md5 这种不可逆的加密方法理论上已经很安全了,但是随着彩虹表的出现,使得大量长度不够的密码可以直接从彩虹表里反推出来。百度一下一堆md5解密的网站。只对密码进行 md5 加密是肯定不够的,所以要原来密码的基础上“加盐”。
盐(salt)可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的 Salt 都不一样
/**
* 获取随机字符串
* length 代表返回字符串的长度
*/
function getRandStr($length){
$str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
$randStr = str_shuffle($str);
$rands= substr($randStr,0,$length);
return $rands;
}
计算方式比如:
md5(md5(password)+md5(salt))
各种形式随意组合,只要登录验证时对应即可。
mysql数据库存储字段
password:根据计算公式计算的值md5(md5(password)+md5(salt))
salt:随机字符串(getRandStr(8))
登录验证时
将获取的用户输入的登录密码根据对应的计算公式计算md5值与数据库中password进行比对