RSA加密web前端用户名密码加密传输至后台并解密

编写加解密公共方法类RSAUtils

import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPublicKey;
public class RSAUtils {private static final KeyPair keyPair = initKey();private static KeyPair initKey() {try {Provider provider =new org.bouncycastle.jce.provider.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);}}public static String generateBase64PublicKey() {PublicKey publicKey = (RSAPublicKey)keyPair.getPublic();return new String(Base64.encodeBase64(publicKey.getEncoded()));}public static String decryptBase64(String string) {return new String(decrypt(Base64.decodeBase64(string.getBytes())));}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);}}
}

前端在向后台发起登录请求之前,先请求后台获取公钥的方法

var publicKey = null;$.ajax({url: "xxx",type: "post",dataType: "text",success: function(data) {var encrypt = new JSEncrypt();if(data){publicKey = data;};if(publicKey==null){$("#msg").html("获取publicKey失败,请联系管理员!");$("#login-btn").removeAttr("disabled");return;};}});

后台生成公钥方法

 @RequestMapping(value = "/xxxx", method = RequestMethod.POST)public String getKey(HttpServletRequest request){String publicKey = RSAUtils.generateBase64PublicKey();return publicKey;}

前端引入jsencrypt.min.js文件,这个js文件网上一大堆,随便搜搜就有,我就不贴出来了。
通过公钥对用户名和密码加密

encrypt.setPublicKey(publicKey);var username;
var password;
username = encrypt.encrypt(vm.username.trim());
password = encrypt.encrypt(vm.password.trim());

接下来就是用加密后的用户名密码请求后台

$.ajax({
type: "POST",url: "xxxxxx",data: {"username":username,"password":password,
},dataType: "json",success: function (result) {if (result.code == 0) {//登录成功parent.location.href = 'index.html';} else {vm.error = true;vm.errorMsg = result.msg;vm.refreshCode();}}});

请求成功之后的代码处理方式可以不用看,按照自己的需求进行处理就可以。这里重点强调一下用户名密码传输时千万不要字符串拼接方式传输,这样后台接收到密文解析的时候会将密文中的+号替换为空格,这样就会导致密文解析出错。楼主在这快差点被坑死。。。。。。
接下来就是后台接收前端传输过来的密文进行解密

username = RSAUtils.decryptBase64(username.trim());
password = RSAUtils.decryptBase64(password.trim());

解密这块就不贴所有代码了,就是在后台登录验证方法中,验证之前将从前端拿到的用户名密码解密一下就可以。基本上这样差不多就可以实现前端用户名密码加密之后传输到后台,后台解密的功能了。

RSA加密web前端用户名密码加密传输至后台并解密相关推荐

  1. web登录用户名密码加密

    阿里云低价服务器1折特惠,优惠爽翻天,点我立即低价购买 之前一直没关注过web应用登录密码加密的问题,这两天用appscan扫描应用,最严重的问题就是这个了,提示我明文发送密码.这个的确很不安全,以前 ...

  2. 青橙商城13 用户名密码加密、用户注册+验证码

    1.用户名密码加密 2.用户注册+验证码 首先定义一个输入手机然后就返回验证码给你: 然后定义控制层调用上面的接口: 添加用户: 就是用户注册时,点击手机注册, 会输入手机,然后发送验证码,那么我们就 ...

  3. python模拟登录密码加密_有关爬虫模拟登陆时,处理用户名密码加密问题的方法...

    之前爬一家网站的数据,需要登陆之后才能进行:所以当时使用selenium偷鸡了一波: 现在我想尝试用requests方法,结果在登录时,就遇到了用户名密码加密问题 查了下登陆有关的js,找到了加密的方 ...

  4. web前端登录密码保存业务

    web前端登录密码保存业务 一.首先要想实现密码保存业务这个需求,首先要明白localstorage,sessionStorage,以及cookie三者之间的区别,为什么要明白这三者之间的联系呢,是应 ...

  5. 基于RSA的WEB前端密码加密方案

    受制于WEB页面源码的暴露,因此传统的对称加密方案以及加密密钥都将暴露在JS文件中,同样可以被解密. 目前比较好的解决方案是WEB页面全程或用户登录等关键环节使用HTTPS进行传输. 另外一种解决方案 ...

  6. java web系统明文密码加密传输

    最近项目PL提出系统数据越权和明文密码传输问题,涉及网络安全的问题,这让我一脸懵逼,查阅相关资料后做相关记录 1. 数据越权: 涉及重要功能需要验证用户是否当前用户操作,修改密码功能接口参数用户Id人 ...

  7. java web项目中对数据库用户名密码加密的一种解决方案

    原文路径:https://blog.csdn.net/u010463032/article/details/7900906 我们使用的项目经常是这个样子的: <bean id="dat ...

  8. 前端利用jsencrypt.min.js进行RSA加密(常用在登录密码加密)全局方法封装

    步骤: 项目中下载 npm install jsencrypt untils文件下新建js文件,封装公共方法 import JSEncrypt from 'jsencrypt/bin/jsencryp ...

  9. java对用户名密码加密_Spring security实现对账户进行加密

    一.原理分析1.1加密原理 首先前端页面发送注册的账户信息到controller层,然后依次经过service层和dao层,最后入库.其中对密码的加密应该放在service层进行,加密后再入库. sp ...

最新文章

  1. 【亲身经验】如何在 6 个月内成为“微软 MVP”
  2. Promise 源码:静态方法
  3. 配置JDK环境变量详细步骤
  4. 项目管理常用文档表格模板一
  5. python词云词频分析_Python数据挖掘:WordCloud词云配置过程及词频分析
  6. 博客迁移到sunface.io
  7. 深度学习与自然语言处理(1)_斯坦福cs224d Lecture 1
  8. 领导看了会炸毛的溢出理论
  9. 与众不同的微前端设计思维
  10. [CC-TRIPS]Children Trips
  11. 既然你装作刀枪不入的样子,那就做好万箭穿心的准备吧!
  12. mysql VS oracle
  13. 2017衢州联赛第四题题解
  14. 中考计算机专业如果忘了怎么办,中考信息技术要注意什么
  15. 圆形的ImageView
  16. fat32转ntfs解决大于4G文件不能保存问题
  17. matlab格兰杰因果检验,格兰杰因果关系检验 平稳性分析 ADF检验 ARMA模型 GA-LS算法 RLS-LS算法 Eviews6.O MATLAB...
  18. npm安装时卡在sill idealTree buildDeps,npm安装速度慢,npm安装卡在一个地方不动
  19. #yyds干货盘点# 如何在 Kubernete 中做日志收集与管理(14)
  20. (超级容易!)使用yolo v5训练自身数据集超详细教程以及一些报错总结。

热门文章

  1. 老板客户让加班重做?除了画圈圈诅咒他们,你还可以这么办…
  2. Formz.Renderzone.Plus.v6.5.4-ISO 1CD (建模软件)
  3. 2018云智中国•百度云ABC赋能政企智能化转型会议在合肥成功举办
  4. arcsoft人脸识别sdk使用方法(android版本)
  5. 写入简谱(flash钢琴谱)自动播放简谱琴声程序 c#
  6. Fiddle无法抓取网页信息或HTTPS
  7. CIO眼中的新一代信息系统
  8. Python—12.1、Oracle操作
  9. java象棋游戏参考文献_java中国象棋(论文+程序)
  10. 2021年电工(初级)考试及电工(初级)考试资料