位置: 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安装教程)

  • steam添加本地游戏文件(Steam添加本地游戏)

    steam添加本地游戏文件(Steam添加本地游戏)

  • 超过五分钟的视频如何发给微信好友(超过五分钟的视频怎么剪短)

    超过五分钟的视频如何发给微信好友(超过五分钟的视频怎么剪短)

  • WPSoffice2019如何在栏间加分隔线(wps2021怎么样)

    WPSoffice2019如何在栏间加分隔线(wps2021怎么样)

  • 抖音dou+推广审核不通过(抖音dou推广审核时间)

    抖音dou+推广审核不通过(抖音dou推广审核时间)

  • 荣耀20可以插耳机吗(荣耀20插耳机没反应)

    荣耀20可以插耳机吗(荣耀20插耳机没反应)

  • 手机一下子收到几十条验证码怎么办(手机一下子收到很多验证码是怎么回事)

    手机一下子收到几十条验证码怎么办(手机一下子收到很多验证码是怎么回事)

  • 纳米技术用在什么地方(纳米技术用在什么上面)

    纳米技术用在什么地方(纳米技术用在什么上面)

  • NFC功能是干嘛的(微信开启nfc功能是干嘛的)

    NFC功能是干嘛的(微信开启nfc功能是干嘛的)

  • 抖音拍视频用什么软件(抖音拍视频用什么相机)

    抖音拍视频用什么软件(抖音拍视频用什么相机)

  • 秘乐短视频审核多久(秘乐发布视频需要审核多久)

    秘乐短视频审核多久(秘乐发布视频需要审核多久)

  • 桥接路由器对网络有影响吗(桥接路由器对网速有影响吗?)

    桥接路由器对网络有影响吗(桥接路由器对网速有影响吗?)

  • 像素2m什么意思(像素2mb是多大尺寸)

    像素2m什么意思(像素2mb是多大尺寸)

  • 华为手机微信图片打不开怎么回事(华为手机微信图片删除了怎么恢复)

    华为手机微信图片打不开怎么回事(华为手机微信图片删除了怎么恢复)

  • 苹果8p相机像素怎么调清晰(苹果8p相机像素设置)

    苹果8p相机像素怎么调清晰(苹果8p相机像素设置)

  • 抖音私信能撤回吗(抖音私信能撤回就证明对方没把消息删除)

    抖音私信能撤回吗(抖音私信能撤回就证明对方没把消息删除)

  • 华为nova4e怎么设置虚拟键(华为nova4e怎么设置小组件)

    华为nova4e怎么设置虚拟键(华为nova4e怎么设置小组件)

  • 电车充电器红灯一闪一闪什么情况(电车充电器红灯一闪一闪的什么情况)

    电车充电器红灯一闪一闪什么情况(电车充电器红灯一闪一闪的什么情况)

  • 磁盘有什么不可以删的(磁盘不可写什么意思)

    磁盘有什么不可以删的(磁盘不可写什么意思)

  • 连接速度是什么意思(连接速度是越小越好吗)

    连接速度是什么意思(连接速度是越小越好吗)

  • 苹果x连不上无线网怎么回事(苹果x连接不了无线网络)

    苹果x连不上无线网怎么回事(苹果x连接不了无线网络)

  • 手机淘宝向店家发文件(手机淘宝店家怎么看不能用花呗付款)

    手机淘宝向店家发文件(手机淘宝店家怎么看不能用花呗付款)

  • 华为正常数据线多长(华为数据线一般有多长)

    华为正常数据线多长(华为数据线一般有多长)

  • 网易云怎么调音质(网易云怎么调音乐倍速)

    网易云怎么调音质(网易云怎么调音乐倍速)

  • beatsx使用技巧

    beatsx使用技巧

  • ps内存ram不足无法存储(ps内存ram不足无法使用工具)

    ps内存ram不足无法存储(ps内存ram不足无法使用工具)

  • 计提利息要计提手续费吗
  • 什么是减免税额90%
  • 小规模纳税季收入怎么算
  • 新准则金融资产科目名称
  • 小规模纳税人免税销售额
  • 怎么报企业所得税季报
  • 没有达到起征点的工资忘计申报个税,可以税前扣除吗
  • 已付的账款叫什么
  • 费用会计具体工作总结
  • 城市生活垃圾处理收费管理办法
  • 结转安装费用的会计分录
  • 开办费一次性摊销企业所得税
  • 从联营企业分回利润可以在税前扣除吗
  • 建筑工程地址
  • 税金及附加附加指什么
  • 典当行的账务处理会计分录大全
  • 户外广告经营总额
  • 房地产企业土地出让金抵减销项税额
  • 汇算清缴补交所得税后报表需要调整吗
  • 任务栏音量图标点击无反应
  • 广告费的会计科目
  • 营改增后的增值税税目税率表
  • scvc8.exe是什么
  • Otter Cliffs, Acadia National Park, Maine (© dbimages/Alamy)
  • thinkphp query
  • 生产成本分配表模板
  • 材料采购计入资产负债表哪里
  • 非营利组织免税范围
  • php socket 非阻塞
  • 公司偷税漏税有哪些表现形式
  • php中函数定义没有返回值类型
  • 小企业会计制度最新版
  • vue组件继承element并重写方法
  • php十进制转二进制算法
  • 财务负责人和法人哪个责任大
  • 计算机视觉opencv 有什么项目
  • telnet 执行命令
  • 不确认收款退款对方还能收到钱么?
  • 减按10的税率征收个人所得税
  • 未开票收入缴纳增值税吗
  • 有哪些业务可以和公交公司合作的
  • 本年缴纳上年的所得税填年报
  • 银行对账单由谁负责
  • 金蝶利润表出现科目
  • 揭秘蒙娜丽莎25恐怖之处
  • 取得税务师证书申请社保补贴
  • 业务招待费进项税
  • 公司收到服务费要交哪些税
  • 总公司和分公司不在一个区怎么纳税
  • 残保金属于职工社保吗
  • 公关费用计入什么科目比较好
  • 商标权属于什么科目
  • 房租收入怎么确认收入
  • 支付货款订金入什么科目
  • 企业退款给个人多久到账
  • 制造费用和管理费用怎么结转
  • 外汇申报国家代码表
  • 年末进项大于销项怎么结转
  • mysql优化十大技巧
  • mysql innode
  • 该程序无法正常启动
  • win7旗舰版系统恢复
  • bios中英文对照表图新版
  • windowsxp注册表在哪
  • mac如何强制退出微信
  • dvd-rom drive是什么意思
  • linux系统的安全机制有哪些
  • korok是什么文件
  • win7网速很慢
  • script_tool_for_windows.bat Windows 环境下的 hosts 一键部署脚本
  • perl date
  • android新手入门
  • n归档是什么软件
  • android背景图片透明度alpha
  • android 自定义
  • 广西增值税发票查询平台
  • 北京税务局待遇有住宿吗
  • 税务局网上缴税
  • 陕西省西安市国家民用航天产业基地邮编
  • 重庆纳税申报流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设