位置: IT常识 - 正文

vue前端RSA加密java后端解密的方法(vue sha256加密)

编辑:rootadmin
vue前端RSA加密java后端解密的方法 一、前言

推荐整理分享vue前端RSA加密java后端解密的方法(vue sha256加密),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue 加密解密,vue 加密解密,vue前端密码加密码,vue rsa加密解密,vue js加密,vue rsa解密,vue rsa解密,vue rsa解密,内容如对您有帮助,希望把文章链接给更多的朋友!

最近安全测试的总是测出安全漏洞来,让开发改。

想了想干脆把请求参数都加密下,前端加密后端解密,这样总差不多了。

看了下AES加密,是对称的,前后端用这个不太行。

vue前端RSA加密java后端解密的方法(vue sha256加密)

于是想到用RSA加密,是非对称的,可以前端加密后端解密。

二、前端代码与用法

1.前端是vue项目,使用时,需要先执行:

npm i jsencrypt

把这个依赖下载到node_modules里面。

2.可以增加一个工具类文件:项目名/src/utils/commonUtil.js,内容如下:

import JSEncrypt from "jsencrypt";export default { encodeRSA(word, keyStr) { //这个是公钥,有入参时用入参,没有入参用默认公钥 keyStr = keyStr ? keyStr : 'MIGxxxxxxxxxxxxxxxxxxxxxxxxxx'; //创建对象 const jsRsa = new JSEncrypt(); //设置公钥 jsRsa.setPublicKey(keyStr); //返回加密后结果 return jsRsa.encrypt(word); }}

3.然后,需要使用的地方,就可以这样用:

//引入第2步的工具类import commonUtil from '@utils/commonUtil'//引入一个发请求的方法,这个也需要npm iimport axios from 'axios'//一个发请求用的方法export function myget(userId) { return axios.get(`/xxx/user`, { headers: { //先把参数rsa加密下,再用urlEncoder转下码,然后放header里传给后台 userId: encodeURIComponent(commonUtil.encodeRSA(userId, null)), }, }).then(res => { return res.data })}

这样,就把加密参数放入header里的userId里了,后台可以取出后解密。

三、后端代码与用法

1.可以先写个工具类,如下:(RSA公钥和私钥可以用这个工具类生成,然后自己记录后使用)

import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import javax.crypto.Cipher;import java.security.KeyFactory;import java.security.Security;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Map;import java.util.HashMap;import java.security.KeyPairGenerator;import java.security.SecureRandom;import java.security.KeyPair;public class RSAUtil { //公钥,可以写前端 public static String public_key="MIGxxxxxx"; //私钥,只能放后端 public static String private_key="MIICxxxxxxxx"; public static void main(String[] args) { //解密数据 try { //生成公钥和私钥 genKeyPair(); String publicKey = keyMap.get(0); //打印出来自己记录下 System.out.println("公钥:" + publicKey); String privateKey = keyMap.get(1); //打印出来自己记录下 System.out.println("私钥:" + privateKey); //获取到后,可以放这里,测试下能不能正确加解密 publicKey = public_key; privateKey = private_key; String orgData = "test"; System.out.println("原数据:" + orgData); //加密 String encryptStr =encrypt(orgData,publicKey); System.out.println("加密结果:" + encryptStr); //解密 String decryptStr = decrypt(encryptStr,privateKey); System.out.println("解密结果:" + decryptStr); } catch (Exception e) { e.printStackTrace(); } } /** * RSA公钥加密 * * @param str 加密字符串 * @param publicKey 公钥 * @return 密文 * @throws Exception 加密过程中的异常信息 */ public static String encrypt(String str,String publicKey) throws Exception { //base64编码的公钥 byte[] decoded = decryptBASE64(publicKey); Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); //RSA加密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubKey); String outStr = encryptBASE64(cipher.doFinal(str.getBytes("UTF-8"))); return outStr; } /** * RSA私钥解密 * * @param str 加密字符串 * @param privateKey 私钥 * @return 明文 * @throws Exception 解密过程中的异常信息 */ public static String decrypt(String str, String privateKey) throws Exception { //64位解码加密后的字符串 byte[] inputByte = decryptBASE64(str); //base64编码的私钥 byte[] decoded = decryptBASE64(privateKey); Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); //RSA解密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, priKey); String outStr = new String(cipher.doFinal(inputByte)); return outStr; } //编码返回字符串 public static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } //解码返回byte public static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } /** * 密钥长度 于原文长度对应 以及越长速度越慢 */ private final static int KEY_SIZE = 1024; /** * 用于封装随机产生的公钥与私钥 */ private static Map<Integer, String> keyMap = new HashMap<Integer, String>(); /** * 随机生成密钥对 * @throws Exception */ public static void genKeyPair() throws Exception { // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); // 初始化密钥对生成器 keyPairGen.initialize(KEY_SIZE, new SecureRandom()); // 生成一个密钥对,保存在keyPair中 KeyPair keyPair = keyPairGen.generateKeyPair(); // 得到私钥 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到公钥 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); String publicKeyString = encryptBASE64(publicKey.getEncoded()); // 得到私钥字符串 String privateKeyString = encryptBASE64(privateKey.getEncoded()); // 将公钥和私钥保存到Map //0表示公钥 keyMap.put(0, publicKeyString); //1表示私钥 keyMap.put(1, privateKeyString); }}

2.使用时,把公钥内容放入前端js,私钥内容就放后端代码里,就可以和前端联调测试了。样例如下:

//测试接口 @GetMapping("/xxx/user") public String myget(HttpServletRequest request) { //先用非对称算法RSA解密一下 try { //从header里获取到参数 String userId = request.getHeader("userId"); log.debug("收到userId,内容为:"+userId); //这里解密,注意先用URLDecode处理了下,如果前端没有用的话,这里也不用处理 userId = RSAUtil.decrypt(URLDecoder.decode(userId,"UTF-8"), RSAUtil.private_key); log.debug("RSA解密成功,userId为"+userId); } catch (Exception e) { log.error("RSA解密失败",e); //如果解密失败,就返回null return null; } return "成功"; }
本文链接地址:https://www.jiuchutong.com/zhishi/298740.html 转载请保留说明!

上一篇:JavaScript charCodeAt() 方法

下一篇:Anaconda 3.6安装教程(详细版本)---可运行Python代码(anaconda3.5.2安装教程)

  • 迅雷怎么下载bt种子文件苹果(迅雷怎么下载bt种子)(迅雷怎么下载bt种子文件电脑)

    迅雷怎么下载bt种子文件苹果(迅雷怎么下载bt种子)(迅雷怎么下载bt种子文件电脑)

  • 苹果手机手电筒快捷键在哪里设置(苹果手机手电筒打不开)

    苹果手机手电筒快捷键在哪里设置(苹果手机手电筒打不开)

  • 华为nova5新机有钢化膜吗(新买的华为nova5里面是不是有钢化膜)

    华为nova5新机有钢化膜吗(新买的华为nova5里面是不是有钢化膜)

  • 剪映为何识别不了字幕(剪映为何识别不了导入音频字幕)

    剪映为何识别不了字幕(剪映为何识别不了导入音频字幕)

  • hdaudio接主板哪里(hdaudio接主板哪里华硕b660m)

    hdaudio接主板哪里(hdaudio接主板哪里华硕b660m)

  • 小度视频通话没声音

    小度视频通话没声音

  • vivou1手机壳和什么型号通用(vivo手机壳和哪个通用)

    vivou1手机壳和什么型号通用(vivo手机壳和哪个通用)

  • 200兆流量是多少G(200兆流量多少钱联通)

    200兆流量是多少G(200兆流量多少钱联通)

  • 照片怎么合成一张(照片怎么合成一张发微信)

    照片怎么合成一张(照片怎么合成一张发微信)

  • 台式电脑可以用无线上网卡上网吗(台式电脑可以用无线鼠标吗?)

    台式电脑可以用无线上网卡上网吗(台式电脑可以用无线鼠标吗?)

  • 笔记本屏幕亮但是不显示桌面(笔记本屏幕亮但是什么都没有为什么)

    笔记本屏幕亮但是不显示桌面(笔记本屏幕亮但是什么都没有为什么)

  • 华为手环多久充一次电(华为手环充电多久能充满)

    华为手环多久充一次电(华为手环充电多久能充满)

  • 找靓机bs机是什么意思(找靓机bs机能买吗)

    找靓机bs机是什么意思(找靓机bs机能买吗)

  • 京东差评买家可以修改吗(京东给差评然后申请退款差评还会在吗)

    京东差评买家可以修改吗(京东给差评然后申请退款差评还会在吗)

  • 手机朋友圈怎么转发(手机朋友圈怎么屏蔽别人)

    手机朋友圈怎么转发(手机朋友圈怎么屏蔽别人)

  • 华为手机第一次充电充多久(华为手机第一次使用怎么激活)

    华为手机第一次充电充多久(华为手机第一次使用怎么激活)

  • 苹果彻底删除照片找回(苹果彻底删除照片不释放内存)

    苹果彻底删除照片找回(苹果彻底删除照片不释放内存)

  • 拼多多怎么开夜间模式吗(拼多多怎么开夜视)

    拼多多怎么开夜间模式吗(拼多多怎么开夜视)

  • iconnect是什么手机软件(icon是什么牌子手机)

    iconnect是什么手机软件(icon是什么牌子手机)

  • 苹果的云盘在哪里打开(iphone云盘在哪里)

    苹果的云盘在哪里打开(iphone云盘在哪里)

  • 地铁一卡通怎么充值(地铁一卡通怎么绑定手机)

    地铁一卡通怎么充值(地铁一卡通怎么绑定手机)

  • oppoa5恢复出厂设置在哪(oppoa5恢复出厂设置要锁屏密码怎么办)

    oppoa5恢复出厂设置在哪(oppoa5恢复出厂设置要锁屏密码怎么办)

  • 苹果手机趣步的糖果怎么卖出去(苹果版趣步)

    苹果手机趣步的糖果怎么卖出去(苹果版趣步)

  • iphone改蓝牙耳机名字(苹果手机改蓝牙耳机)

    iphone改蓝牙耳机名字(苹果手机改蓝牙耳机)

  • 抖音白娘子变人怎么拍的(抖音白娘子变孩子特效)

    抖音白娘子变人怎么拍的(抖音白娘子变孩子特效)

  • 计算机视觉方面的三大顶级会议:ICCV,CVPR,ECCV(统称ICE)(计算机视觉方面的期刊)

    计算机视觉方面的三大顶级会议:ICCV,CVPR,ECCV(统称ICE)(计算机视觉方面的期刊)

  • 「Vue面试题」在项目中你是如何解决跨域的?(vue的常见面试题)

    「Vue面试题」在项目中你是如何解决跨域的?(vue的常见面试题)

  • 个人所得税应纳税额怎么计算
  • 小规模纳税人租赁不动产税率
  • 年检更换需要什么材料
  • 实际负税计算公式
  • 发票上税额加不上怎么办
  • 坏账准备转回的条件
  • 母公司合并子公司会计处理
  • 如何开银行卡账户
  • 垃圾处理费怎么算
  • 冲红票需要给购方吗
  • 税法免抵退计算例题
  • 外贸公司有国企吗
  • 退休后兼职收入需要交税吗
  • 代扣代缴手续费返还需要缴纳增值税吗
  • 企业开办费的会计和税务处理
  • 零售汽油费发票需要交印花税吗?
  • 税控发票系统
  • 开具出口发票时免税类型怎么选择?
  • 城市建设维护税是什么意思
  • 软件企业增值税即征即退会计处理
  • 专项应付款贷方是什么意思
  • 原材料实际成本法核算问题
  • 出租房屋如何确认收入
  • 预提成本的会计处理
  • 个税申报晚了会退税费吗
  • 最新windows10
  • 股东分红怎么处理
  • 未开票收入缴纳增值税怎么冲减补开发票
  • composer.json和composer.lock
  • php自定义变量
  • 保险委托支付
  • 企业个人借款会计分录
  • uniapp动态设置标题
  • seata+nacos
  • 图像自动生成
  • 原材料用于在建工程增值税如何处理
  • 年度预算的意义
  • 银行贷款入账需要什么
  • 商业承兑汇票如何查询
  • 所得税年度报表申报完怎么打印
  • ES + Redis + MySQL,这个高可用架构设计太顶了!
  • 报销人和收款人是一个人
  • 一般纳税人零申报怎么报税步骤
  • 借条每月还款怎么写
  • 数据库镜像是什么意思
  • 定期定额征收和核定征收的哪种税率高
  • 外资企业贷款条件
  • 当月作废的专票还是要交增值税吗
  • 出口货物索赔如何确认收入
  • 代收通行费不征税吗
  • 非营利机构如何申请
  • 长期股权投资权益法初始成本的确定
  • 固定资产折旧的会计凭证
  • 缴纳注册资金印花税怎么做账
  • mysql压缩包安装教程8.0.20
  • 电脑操作系统win7
  • ubuntu for windows
  • win8电脑定时关机怎么设置方法
  • linux系统bug
  • win7本地磁盘图标变了
  • win7任务栏窗口总是自动切换
  • hpg是什么软件打开
  • linux zen3
  • explore是什么文件
  • wind10手机版
  • linux 中的MYSQL命令汇总 适合学习linux下配置mysql的朋友
  • Win7安全模式怎么切换到正常模式
  • PHPMyAdmin 2.7.0-pl1下载
  • 景深图片的3d显示器
  • 利用nodejs实现百度文本审核
  • oracle中提取日期时间的特定部分
  • 地铁酷跑瞬间移动
  • unity3d mod
  • Javascript字符串出现次数
  • android/data/wifipwd
  • boost源码编译
  • 车船税每年都是300怎么变成600
  • 中通快递深圳同城多少钱
  • 地税局属于省直单位吗
  • 税务局风控
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设