加密与解密
密码的安全
密码越长越复杂 就会越安全, 但是越不便利
服务器存储密码的方式也会影响安全
一套密码走天下和明文存储密码都会带来较高风险
明文存储
密码被原封不动的存储在数据库中,
验证密码时直接比较是否相同
缺点, 能够访问数据库的员工或黑客入侵数据库后将直接获得所有密码
撞库攻击
如果用户在不同平台使用的密码相同,黑客通过某对账号密码 在其他网站服务进行登录
密码加密
凯撒加密
属于对称性加密,
属于古典密码学
根据字母在字母表中, 进行一定偏移, 得到密文, 解密时,反向偏移, 偏移量的数字就是秘钥,用于加密和解密
常用对称性加密算法有,DES , 3DES , AES等
使用对称性加密后的密码,一旦秘钥泄露就不够安全
哈希
单向不可逆的, 就像知道5个数字相乘后的结果, 很难推导出是哪5个数字
常见hash函数包括MD5, SHA, SHA256(是SHA2细分出来的哈希函数),
SHA是一系列哈希函数的总称,
彩虹表攻击
黑客通过对常用密码进行hash运算后产出一个查找表,用哈希值查找明文密码
随着时间推移加上hash运算速度快,很多字符串对应的hash值已经不在是密码
哈希加盐
盐就是在密码中插入的随机字符串
先对密码加盐再计算哈希值, 常见密码加盐后就不常见了, 有效对付了彩虹表攻击,破解一个密码时需要用常用密码表和用户对应的盐进行hash运算,相当于破解每个用户都 计算了一遍彩虹表
因为盐是随机的,就算多个用户密码相同 也不会出现存储相同的hash值了, 避免破解一个密码相当于破解多个密码
登录时,把用户的盐拿出来一起进行hash运算,然后对比hash值验证
秘钥延伸哈希算法
算法有: bcrypt, scrypt, argon2, PBKDF2
可增加计算hash值所用时间和空间, 除了指定原始密码和盐,提供了成本参数
hash(pwd, salt, cost) 通过成本参数可以有效控制计算时间或空间消耗
这种算法对用户感知不大,如原先需要0.1微妙,现在需要1毫秒, 但是对于黑客来说计算彩虹表的成本很大
随着计算机运算能力增加, 破解哈希加盐时间成本下降
避免密码泄露
1, 设置长且复杂的密码(使用密码管理器生成和管理)
2, 不要一套密码走天下(撞库)
3, 不要存储密码(使用微信, qq等第三方登录)