加密与解密


密码的安全

密码越长越复杂 就会越安全, 但是越不便利

服务器存储密码的方式也会影响安全

一套密码走天下和明文存储密码都会带来较高风险

明文存储

密码被原封不动的存储在数据库中,

验证密码时直接比较是否相同

缺点, 能够访问数据库的员工或黑客入侵数据库后将直接获得所有密码

撞库攻击

如果用户在不同平台使用的密码相同,黑客通过某对账号密码 在其他网站服务进行登录

密码加密

凯撒加密

属于对称性加密,

属于古典密码学

根据字母在字母表中, 进行一定偏移, 得到密文, 解密时,反向偏移, 偏移量的数字就是秘钥,用于加密和解密

常用对称性加密算法有,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等第三方登录)