标签:
1. 一般数据库中存储密码使用MD5或者SHA系列(如SHA1、SHA256、SHA384、SHA512等)
1) 这两种算法都是单向的Hash(不可逆),MD5为128位,SHA1为160位(位数长,所以SHA1穷举破解比MD5难)。从理论上来说,有可能不同的数据生成同样的MD5值。
2) 均有彩虹表可破。
3) 加盐可以应付彩虹表。加盐后,密码长度数倍增长,相应彩虹表会扩大无数倍,这样的彩虹表是很难存储的,无法通过以空间换时间的方式去破解。但如果是固定盐,并且盐丢了,只需要重新计算一份彩虹表即可破解。随机盐能进一步增加安全性,因为即使脱库后查到了盐,并且有源码知道加盐规则,也需要针对每个用户生成一份彩虹表,所以完全破解也不现实,只有可能去单独破解。
4) 算法BCrypt通过多次Hash提高安全性,增加彩虹表的生成时间来达到无法破解,但这种算法同时也减慢了登录时的速度,因为需要大量计算。
5) 感觉BCrypt不太划算,一般hash+salt即可,但最好盐、数据库、源码分开存放,这样能大大降低风险。
http://drops.wooyun.org/papers/1066
2. 传输数据加密:AES(对称加密)、RSA(非对称加密)
1) 对称加密:加密和解密的密钥相同。加解密速度快,密钥管理困难,主要用于大数据量的加密。
2) 非对称加密:即公钥加密。公钥公开,用于加密;私钥保存用于解密。从公钥到私钥的过程是不可逆的。密钥管理方便,加解密速度慢,主要用于密钥交互密钥的管理。
3) 根据以上两点可知,现在一般客户端先生成AES密钥,然后通过RSA加密将密钥传输给服务端,以后的数据则均通过AES加密。
标签:
原文地址:http://www.cnblogs.com/crescentstar/p/5064599.html