- 简单区分对称加密、非对称加密
对称加密就是使用相同的明文加密出来的密文都是一样的。非对称加密就是使用相同的明文加密出来的密文是不一样。比如:登录接口使用RSA进行加密传递参数,每次加密产生的密文都是不一样的。但是后台可以解析出来,每个密文使用过一次以后就废弃,这样别人就算截获了密文,也无法进行请求重放!
- RSA是非对称加密,除了加解密之外,还可以用来做签名。
-
防止数据泄露,使用非对称加解密,密文使用一次即废弃
,服务端可以只接受可解密的加密字符串,其他解密不出来的均返回非法请求。以此要求使用加密传输。 -
防止参数被篡改,使用MD5加盐
。设定一个字符串(盐值),将盐值和参数进行拼接,然后使用MD5生成一个授权码(该授权码在参数中一起传递给服务端);服务端难道参数后,使用和客户端约定好的盐值字符串拼接后,同样使用MD5生成一个授权码,将该授权码和客户端传入的授权码进行比较。如果相同,则验证通过。需要考虑盐值字符串的动态升级策略,比如设定一个时间间隔,根据算法自动升级
。 -
防止数据被爬虫,增加一个基于时间间隔的token参数
,token会随着时间戳的变化而变化。服务端使用一个tokenInterceptor拦截所有后台请求判断请求中是否带有合法的token参数,来决定是否对请求放行。
token在第一次客户端登录时由服务器生成返回给客户端
,生成方式:
只是用token不能完全杜绝爬虫,因为可以使用真实的用户信息来请求数据。此时需要建立黑名单库,比如请求ip,请求uid,如果请求频率过高就将其添加到黑名单中,使其发出的请求无效。String token = MD5(ToolUtils.systime() + ToolUtils.randomNo(4)); //时间戳 + 4位随机数
- RSA加密后的密文为什么都是以“=”结尾?因为RSA加密后得到的是byte[]无法在网路上直接传递,所以需要将byte[]使用base64转码成字符串。
Base64可以把一个二进制数据转换成一个字符串,是一种编码格式,或者说编码算法
,Base64可以表示64个基本的编码(A-Z,a-z,0-9,+,/) - Base64的基本原理?
- 放窃取:非对称加密(RSA)
- 防篡改:MD5 + 盐
- 防泄漏:采用token机制
- 分布式、微服务、数据安全、Spring、大数据、容器技术(K8S)、AI、消息中间件、RPC、DevOps、ES、分库分表、负载均衡、缓存技术、并发、LVS、线程。
截图:






网友评论