登录验证之密码盐(Salt)

为什么要在密码里加点“盐”

所谓加盐(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进行比对

你可能感兴趣的:(登录验证之密码盐(Salt))