加密算法
加密算法可以归结为三大类:哈希算法、对称加密算法、非对称加密算法
1、DES算法进行加密解密;后来人们觉得DES不够安全,发明了3DES算法;而如今最为流行的对称加密算法是AES算法。
对称算法的好处是加密解密的效率比较高。相应的,对称算法的缺点是不够安全。
2、RSA算法是最常见的非对称加密算法。和对称加密算法比如DES的明显区别在于用于加密、解密的密钥是不同的。使用RSA算法,
只要密钥足够长(一般要求1024bit),加密的信息是不能被破解的。
3、信息摘要算法又叫加密散列算法,加密过程不需要密钥,常见的加密散列算法有MD系列和SHA系列。
从严格意义上来说,哈希算法并不属于加密算法,但它在信息安全领域起到了很重要的作用。最重要的作用就是生成信息摘要,
用以验证原信息的完整性和来源的可靠性。
一个理想的加密散列函数应该具备以下特性:
1、任何信息传入后,输出的总是长度固定;
2、消息摘要看起来是“随机的”,这样根据原始信息就很难推测出值;
3、好的散列函数碰撞概率应该极低,也就是不同信息传入后得到相同值的概率;
解决方案:在数据库中不直接存储口令原文,而是存储口令的密文。密文是通过原文执行消息摘要计算后的结果。可以考虑使用JDK
提供的md5算法进行加密处理,但是由于碰撞算法的发展,所以直接加密的结果可以通过碰撞算法进行解密。
解决方案:引入一个加密算法的参数–salt盐值,而且进行多次hash计算获取加密的指纹数据,可以在一定程度上方法使用碰撞
算法进行解密
JDK提供了md5和sha-1算法的实现,这里选择使用md5进行加密
前后端分离开发或者使用水平扩展部署多个应用时,用户跟踪就是个问题。
1、依赖于代理服务器Nginx实现
2、可以使用spring session依赖于redis实现
3、依赖于token身份验证方式实现
token就是一种身份验证方法,扩展性和安全性更高,非常适合用在Web应用和移动开发应用上。
1、token验证流程
使用token身份验证,服务器端就不会存储用户的登录记录。
(1)客户端使用用户名跟密码请求登录;
(2)服务端收到请求,去验证用户名与密码;
(3)验证成功后,服务端会签发一个Token,再把这个Token发送给客户端;
(4)客户端收到Token以后可以把它存储起来,比如放在Cookie里或者Local Storage里;
(5)客户端每次向服务端请求资源的时候需要带着服务端签发的T