14-SpringSecurity:前后端分离项目中用户名与密码通过RSA加密传输
在前后端分离项目中,通过RSA加密传输用户名与密码是可行的,并且可以有效提高安全性。具体实现方案如下:RSA加密策略:采用固定RSA密钥对:生成公钥与私钥,公钥存储在前端,私钥存储在后端。这种方式在保证安全性的前提下,更符合实际应用需求,避免了动态生成密钥对带来的性能损耗。
前端请求转发或后端CORS配置允许跨域,实现加密传输。在开发环境中,可以使用代理服务转发请求;在生产环境中,通过Nginx等工具实现跨域支持。此外,也可以通过代码直接生成RSA密钥对,简化自动化部署过程。
跨域 配置跨域访问:在前后端分离项目中,通过配置SpringBoot和SpringSecurity开启跨域访问,允许前端发起跨域请求。遗留问题与优化 权限校验方法:除了@PreAuthorize注解,还可以使用hasAnyAuthority、hasRole等方法进行权限校验。 自定义权限校验:基于配置的权限控制提供更灵活的权限管理。
跨域问题在前后端分离项目中常见,我们通过配置 SpringBoot 和 SpringSecurity 开启跨域访问,允许前端发起跨域请求。遗留问题与优化 除了使用 @PreAuthorize 注解进行权限校验,Spring Security 还提供了其他方法如 hasAnyAuthority、hasRole 等。我们可以理解 hasAuthority 的原理,再学习其他方法。
关键点是请求filter的位置非常重要。这里要放在 spring security 内置过滤器前,spring CorsFilter 之后,此处多次测试猜的数为-100,暂未找到更科学方法。jsonUtils 工具类 JAVA结束 上诉把程序以及思路提供,可以根据自己需要的加密解密方式进行处理,以下两种方式我进行了尝试最终选择了第二种。
前后端交互数据加解密
1、前后端交互数据加解密方案:将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。使用服务端持有的私钥解密第4步获取到的RSA加密byte。从而获取到了第二步时候的数据,同时需要base64解码data数据。
2、RSA+AES混合加密,即后端通过RSA算法生成一对公私钥,并把公钥提供给前端。前端通过AES算法生成密钥,利用公钥进行加密并送给后端,后端根据私钥进行解密,得到与前端相同的AES密钥。然后,前后端就可以利用AES密钥对称加密进行数据交互。详细步骤如图所示。RSA+AES混合加密,结合了两种加密方式的优点。
3、为了实现登录逻辑,前端需要在点击登录按钮时获取用户输入的账号、密码及时间戳。然后,对密码进行AES加密,生成签名,并发起AJAX请求。后端接收到请求后,验证签名、解密密码并与数据库进行匹配,最终返回登录结果。通过以上步骤,前后端交互完成登录功能。
4、web前端与后端的交互主要通过数据传递来实现,具体方式如下:表单数据提交:用户在前端页面上填写表单,如登录信息、注册信息、商品购买信息等。表单数据通过http请求发送给后端服务器。后端服务器接收并处理这些数据,如验证用户身份、保存商品信息到数据库等。
5、解释 确定接口和数据格式:前端和后端需要共同协商接口和数据格式,确保双方都能够读取和传输数据。 后端接口开发和测试:后端需要按照接口规范进行开发,并完成相关的测试。 前端接口调用和数据展示:前端需要利用接口实现数据的调用和展示到页面上。
前端接口响应加密解密方式
前端接口响应的加密解密方式可以通过多种途径实现。一种常见的方法是在后端使用注解对响应体进行加密处理。例如,在SpringBoot等后端框架中,开发者可以自定义注解如@EncryptResPONseBody,用于标记需要对响应体进行加密的控制器方法。
前后端必须使用相同的加密模式、偏移量、秘钥和盐。 在前端发送至后端的数据中,需将所有的等号替换为任意字符,否则可能导致解密失败。在后端处理加密数据时,使用`hutool`工具包进行解密。实验结果显示,前端与后端之间数据交换顺畅,且加密与解密过程准确无误。
响应流程:服务器处理完数据后,使用私钥加密新生成的AES密钥,并用服务器私钥对加密后的AES密钥进行签名(使用MD5withRSA算法)。加密后的响应数据、新AES密钥以及签名一同发送至客户端。客户端收到响应后,先用服务器公钥验证签名,验证成功后再用新AES密钥解密响应数据。
加密方案包括两部分:前端MD5加密和后端BCrypt加密。前端在注册或登录时,直接使用MD5加密处理密码。登录时则采用MD5+BCrypt双重加密,BCrypt加密方式是不可逆加密,每次加密生成的字符串都不同。前端效果表现为每次动态加密生成的密码字符串不一致。在数据库中存储加密后的密码,以确保安全性。
本文基于SpringBoot针对消息体进行解密,目前仅支持请求消息解密。(响应消息过大情况下,加密会带来严重的性能问题。)流程如下:使用DES cbc模式对称加密请求体。要求客户端请求前加对消息体进行加密,服务器端通过SpringMVC Advice拦截请求解密后,传给controller的方法。
前端加密方式主要包括以下几种:对称加密:DES:一种广泛应用的对称加密方式,使用相同的密钥进行加密和解密,效率高。可以通过CryptoJS库实现ECB模式和PKcs7填充,确保数据安全传输。非对称加密:RSA:使用公钥加密,私钥解密,安全性更高。广泛应用于数字签名、密钥交换等领域。
VUE+Springboot实现登录密码动态加解密(bcrypt+md5)
1、login.vue 在登录时,首先使用MD5加密密码,然后使用BCrypt对加密后的密码进行二次加密。设置加密的盐值rounds为10。
2、对于后端加密的实现,主要依赖Spring Boot框架和Spring Security组件。后端通过配置BCryptPassWordEncoder类实现密码的BCrypt加密。在登录校验过程中,后端服务器通过比较数据库中存储的加密密码与用户输入的加密密码是否匹配,来判断登录请求的有效性。
3、需求分析首要目标是确保用户密码在登录和注册请求中不暴露明文,以及后端数据库不存储明文密码。为了达到这个目标,我们通常采取前端加密传输,后端再加密存储的方式。 实现步骤1 实现前的准备在实际项目中,常用的加密方式包括对称加密、非对称加密和哈希函数。