密码加密
- 用户密码在数据库中以明文形式存储,存在很大的安全隐患
- 密码加密的方式:
- 使用加密算法:
- 123456 -> 每个数字加1 -> 234567
- 加密算法主要为了保证数据传输阶段的安全,要求必须可以通过密文反推回明文
- 公司内部员工,在泄漏密文的同时,也可能泄漏加密算法和使用的参数,不法分子还是可以通过密文反推回明文
- 消息摘要算法:
- 消息一致的情况下,使用相同算法,生成的摘要一定一致
- 不管消息有多大,生成的摘要都是固定长度的
- 消息不一致的情况下,生成的摘要重复的概率非常低
- 以一个MD5算法为例,生成的摘要128位定长的2进制数据
- 虽然算法公开,但是只能通过消息生成摘要,但是无法通过摘要反推出消息,因为在计算过程中存在精度的缺失
- 常用的消息摘要算法:
- SHA:SHA1 SHA256 SHA384 SHA512
- MD: MD5
- 使用加密算法:
- 关于消息摘要算法的安全性
- 是否可以通过密文反推回明文
- 利用“消息一致,摘要一定一致”的特点,在数据库中记录消息和摘要的对应关系
- 1位 70种可能 70个键值对
- 2位 70 * 70 4900
- 3位 5000 * 70 350000
- 4位 350000 * 70
- 以此类推,位数越多,需要穷举的键值对越多
- 利用“消息一致,摘要一定一致”的特点,在数据库中记录消息和摘要的对应关系
- 如何提高密码的安全性:
- 要求用户使用强度更高的密码:P@ssw0rd,不容易被穷举到
- 多次加密
- 使用长度更长的消息摘要算法
- 加盐
- 普通字符串
- 加时间戳
- 加UUID
- 以上方法综合使用
- 是否可以通过密文反推回明文
- 利用代码实现数据摘要
- 利用DigestUtils的API实现,主要是MD5数据摘要算法
- 如果想要在编程中使用其他的数据摘要算法:
- 利用Java原生的工具类:MessageDigest.getInstance(“md5”);
- 利用commons-codec.jar:DigestUtils.进行各类消息摘要算法的计算