加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联。
1背景
不可逆的hash加密算法,比如SHA256, SHA512, SHA3等,对于同一密码,同一加密算法会产生相同的hash值,这样,当用户进行身份验证时,也可对用户输入的明文密码应用相同的hash加密算法,得出一个hash值,然后使用该hash值和之前存储好的密文值进行对照,如果两个值相同,则密码认证成功,否则密码认证失败。
由于密码是由用户设定的,在实际应用中,用户设置的密码复杂度可能不够高,同时不同的用户极有可能会使用相同的密码,那么这些用户对应的密文也会相同,这样,当存储用户密码的数据库泄露后,攻击者会很容易便能找到相同密码的用户,从而也降低了破解密码的难度,因此,在对用户密码进行加密时,需要考虑对密码进行掩饰,即使是相同的密码,也应该要保存为不同的密文,即使用户输入的是弱密码,也需要考虑进行增强,从而增加密码被攻破的难度,而使用带盐的加密hash值便能满足该需求。
2加密盐的实现方法
2.1加密存储
输入: 密码字符串passWord
输出:盐值 salt 、密码密文passWordHash
函数:加密hash函数
其中:“盐值 salt”是在加密过程中生成的随机字符串;
可以将salt放到passWord前面作为前缀或放到passWord后面作为后缀得到新的字符串PS,即,PS = password和salt的组合串;
密码密文passWordHash = Hash加密函数(PS );
将用户名、密码密文passWordHash和盐值salt一起保存到数据库中。
2.2密码校验
输入: 密码字符串passWordCur
输出:密码校验是否成功
处理: 1)、取出当前用户密码加密时使用的盐值salt
2)、得到本次输入的密码passWordCur和盐值salt的组合字符串PS
3)、得出本次输入密码的密文passWordHashCur= Hash加密函数(PS );
4)、比较passWordHashCur和用户最初设置的密码密文passWordHash是否一致,如果一致,则校验成功,否则校验失败。