RSA加密:Web前端登录账户密码加密传输

    一般在做系统时候对安全性要求比较高,现在通常选择https协议来进行数据传输。很多情况下一般的javaweb网站,如果安全要求不是很高的话,用https协议就可以了。在这种情况下,密码的明文传输显然是不合适的,因为请求如果在传输过程中被截了,就可以直接拿明文密码登录网站了。 为了传输数据的安全、今天就采用RSA加密方式来进行加密。

实现方式思路:

编写加解密公共方法类--公钥方法--前端在向后台发起登录请求之前,先请求后台获取公钥的方法,然后经过加密之后再发起登录请求--前端代码需引入jsencrypt.min.js文件--后端接收前端传输过来的密文进行解密--完成登录

完整代码实现:

后端首先引入加密jar包

<!--需要导入的依赖jar--><!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk16 --><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk16</artifactId><version>1.46</version></dependency>

编写RSA加密工具类:

package com.railway.common.utils;
/*** Created by Administrator on 2022/2/8 0008.*/import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPublicKey;public class RSAUtil{private static final KeyPair keyPair = initKey();private static KeyPair initKey() {try {Provider provider =new BouncyCastleProvider();Security.addProvider(provider);SecureRandom random = new SecureRandom();KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", provider);generator.initialize(1024,random);return generator.generateKeyPair();} catch(Exception e) {throw new RuntimeException(e);}}private static byte[] decrypt(byte[] byteArray) {try {Provider provider = new org.bouncycastle.jce.provider.BouncyCastleProvider();Security.addProvider(provider);Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", provider);PrivateKey privateKey = keyPair.getPrivate();cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] plainText = cipher.doFinal(byteArray);return plainText;} catch(Exception e) {throw new RuntimeException(e);}}public static String decryptBase64(String string) {return new String(decrypt(Base64.decodeBase64(string.getBytes())));}public static String generateBase64PublicKey() {PublicKey publicKey = (RSAPublicKey)keyPair.getPublic();return new String(Base64.encodeBase64(publicKey.getEncoded()));}}

编写前端需要调用后端生成公钥方法接口:

//	后端登录生成公钥方法@RequestMapping(value = "/getPublicKey", method = RequestMethod.GET)public R RSAKey(){String publicKey = RSAUtil.generateBase64PublicKey();return R.ok().put("publicKey",publicKey);}

前端向后台发送登录请求前,先向后台请求获取公钥,加密后再发起登录请求。

需要提前引入 jsencrypt.min.js文件或npm安装就行

// 获取公钥
export function encryption(username, password) {return new Promise((resolve, reject) => {PublicKey().then((res) => {console.log(res);let encrypt = new JSEncrypt(); //创建加密实例let PublicKey = res.publicKey;encrypt.setPublicKey(PublicKey);username = encrypt.encrypt(username);password = encrypt.encrypt(password);resolve({username: username,password: password})})})
}

后端登录接收并解密:

 后端登录接口实现:

/*** 登录*/@RequestMapping(value = "/sys/login",method = {RequestMethod.GET,RequestMethod.POST})public Map<String, Object> login(@RequestParam String username, @RequestParam String password)throws IOException {username=username.replaceAll(" ", "+");password=password.replaceAll(" ", "+");username = RSAUtil.decryptBase64(username.trim());password = RSAUtil.decryptBase64(password.trim());System.out.println(username+password);SysUserEntity user = sysUserService.queryByUserName(username);//账号不存在、密码错误if(user == null || !user.getPassword().equals(new Sha256Hash(password, user.getSalt()).toHex())) {return R.error("账号或密码不正确");}//账号锁定if(user.getStatus() == 0){return R.error("账号已被锁定,请联系管理员");}//生成token,并保存到数据库R r = sysUserTokenService.createToken(user.getUserId());r.put("user",user);return r;}

 源码获取: 

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

打卡 文章 更新 192/  365天

 精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例《100套》

web前端期末大作业网页实战《100套》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA编译运行Springboot+vue项目卡死,一直building和copying resources

是因为我把node_modules也放在了resource目录下、编译的时候target文件目录过大或一直递归循环、导致卡死一直在copying resources当中&#xff0c;在IDEA中设置一下忽略node_modules文件夹即可。

基于Java+Jsp+SpringMVC漫威手办商城系统设计和实现

&#x1f345; 作者简介&#xff1a;CSDN特邀作者✌、java领域优质创作者&#x1f4aa; &#x1f345;关注公众号【java李杨勇】 简历模板、学习资料、面试题库等都给你 &#x1f345;文末获取源码联系&#x1f345; 一、前言介绍&#xff1a; 随着社会的快速发展&#xff0c;…

基于Java+jquery+SpringMVC校园网站平台设计和实现

&#x1f345; 作者简介&#xff1a;CSDN特邀作者✌、java领域优质创作者&#x1f4aa; &#x1f345;关注公众号【java李杨勇】 简历模板、学习资料、面试题库等都给你 &#x1f345;文末获取源码联系&#x1f345; 目录 一、前言介绍&#xff1a; 二、功能设计&#xff1…

基于Java+SpringBoot+vue+element等动物救助平台设计和实现

&#x1f345; 作者简介&#xff1a;CSDN特邀作者✌、java领域优质创作者&#x1f4aa; &#x1f345;关注公众号【java李杨勇】 简历模板、学习资料、面试题库等都给你 &#x1f345;文末获取源码联系&#x1f345; &#x1f345;新星计划第三季【Java】赛道的报名入口&…

基于Java+SpringMvc+vue+element实现上海汽车博物馆平台

&#x1f345; 作者简介&#xff1a;CSDN特邀作者✌、博客专家✌、java领域优质创作者&#x1f4aa; &#x1f345;关注公众号【java李杨勇】 简历模板、学习资料、面试题库等都给你&#x1f4aa; &#x1f345;文末获取源码联系&#x1f345; &#x1f345;新星计划第三季【J…

IDEA: vue文件 File is read-only

今天有个同学问我是vue文件设置了什么权限吗&#xff1f;文件只读操作。 解决方法;这是因为文件主动或者被动被锁定了&#xff0c;选择相应文件&#xff0c;点击File---Make File Writable处理解决即可。

基于Java+SpringBoot+vue+element实现毕业就业招聘系统

&#x1f345; 作者简介&#xff1a;CSDN特邀作者✌、博客专家✌、java领域优质创作者&#x1f4aa; &#x1f345;关注公众号【java李阳勇】 简历模板、学习资料、面试题库等都给你&#x1f4aa; &#x1f345;文末获取联系&#x1f345;精彩专栏推荐订阅&#x1f447;&#…

基于Java+SpringBoot+vue+element实现扶贫助农政策平台系统

&#x1f345; 作者简介&#xff1a;CSDN特邀作者✌、博客专家✌、java领域优质创作者&#x1f4aa; &#x1f345;关注公众号【java李杨勇】 简历模板、学习资料、面试题库等都给你&#x1f4aa; &#x1f345;新星计划第三季【Java】赛道的报名入口&#xff01;下一个新星就…

基于Java+SpringBoot+vue+element实现前后端分离玩具商城系统

&#x1f345; 作者简介&#xff1a;CSDN特邀作者✌、博客专家✌、java领域优质创作者&#x1f4aa; &#x1f345;关注公众号【java李杨勇】 简历模板、学习资料、面试题库等都给你&#x1f4aa; &#x1f345;文末获取源码联系&#x1f345; &#x1f345;新星计划第三季【J…

Java 结构化数据处理开源库 SPL

前言介绍&#xff1a; 现代Java应用架构越来越强调数据存储和处理分离&#xff0c;以获得更好的可维护性、可扩展性以及可移植性&#xff0c;比如火热的微服务就是一种典型。这种架构通常要求业务逻辑要在Java程序中实现&#xff0c;而不是像传统应用架构中放在数据库中。 应用…

IDEA项目 let报错爆红

用idea编写代码的时候 let报错爆红 解决方法&#xff1a;修改版本 设置后就ok了

基于Java+SpringBoot+vue+element实现汽车订票管理平台详细设计和实现

&#x1f345; 作者简介&#xff1a;CSDN特邀作者✌、博客专家✌、java领域优质创作者&#x1f4aa; &#x1f345;关注公众号【java李阳勇】 简历模板、学习资料、面试题库等都给你&#x1f4aa; &#x1f345;文末获取源码联系&#x1f345; &#x1f345;新星计划第三季【J…

疫情期间程序员大学生居家远程办公神器--ToDesk

前言介绍&#xff1a; 最近因为疫情的原因&#xff01;为了防止疫情更大范围扩散&#xff0c;全国的疫情管控手段升级了&#xff0c;无论是工作还是部分同学们毕业设计答辩或中秋检查的时候&#xff01;一律居家办公或远程答辩毕业&#xff0c;或为他们提供远程协助服务&#x…

基于Java+SpringMvc+vue+element实现驾校管理系统详细设计

&#x1f345; 作者简介&#xff1a;CSDN特邀作者✌、博客专家✌、java领域优质创作者&#x1f4aa; &#x1f345;关注公众号【java李阳勇】 简历模板、学习资料、面试题库等都给你&#x1f4aa; &#x1f345;新星计划第三季【Java】赛道的报名入口&#xff01;下一个新星就…

IDEA:vue中缺少vue-quill-editor富文本插件

idea安装运行vue项目报错 解决方法&#xff1a;npm install vue-quill-editor --save

基于Java+SpringBoot+vue+element实现家具购物销售网站详细设计和实现

&#x1f345;博主介绍&#x1f345;&#xff1a;✌公司项目主程、全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ &#x1f345;公众号&#x1f34…

工业互联网-助力企业数字化转型-跨系统级数据通道政策支撑

关于印发《工业互联网专项工作组2021年工作计划》的通知 工厅信管〔2021〕423号 工业互联网专项工作组成员单位办公厅&#xff08;办公室、综合司&#xff09;&#xff1a; 现将《工业互联网专项工作组2021年工作计划》印发给你们&#xff0c;请认真贯彻落实。 附件&#xf…

工业互联网-工业企业大数据交换通道-数据通道产品描述

经济全球化浪潮席卷全球&#xff0c;信息产业日益成为现代经济的主导&#xff0c;并正在向数字经济时代过渡&#xff0c;让数字参与决策是企业信息化建设的价值所在。随着国际市场一体化、信息技术集成化与信息资源网络化的不断发展&#xff0c;企业要适应全球化激烈的市场竞争…

工业互联网智能智造-工业企业大数据汇聚通道-产品设计

本产品主要解决问题&#xff1a; 在不改变企业现有运营模式、系统的情况下&#xff0c;在 企业内部的 系统与系统间、 企业与企业间的系统 构建标准的 数据 桥梁。 低依赖级 解决系统及 数据孤岛 问题。 技术手段&#xff1a; 依托现有成熟技术手段&#xff0c;在不影响原业…

eclipse打开报错:Failed to load the JNI shared library

1.启动eclipse出现如下报错&#xff1a; 弹出框显示&#xff1a;Failed to load the JNI shared library 2.出现原因以及解决办法&#xff1a; (1)原因1&#xff1a;JDK和eclipse位数不匹配。 错误原因&#xff1a;安装的JDK和eclipse一个版本位数是64位&#xff0c;一个是32位…