Vue前端和Java后端 联调使用AES 前后端加密解密

最近在项目中需要针对重要数据进行加密传输,在网上找了一大推加密方式 最终采用AES 加密

Java端

package com.zk.web.util;/*** AES 128bit 加密解密工具类* @author dufy*/import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;public class AesEncryptUtil {//使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同!private static String KEY = "1234567890123456";private static String IV = "1234567890123456";/*** 加密方法* @param data  要加密的数据* @param key 加密key* @param iv 加密iv* @return 加密的结果* @throws Exception*/public static String encrypt(String data, String key, String iv) throws Exception {try {Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"NoPadding PkcsPaddingint blockSize = cipher.getBlockSize();byte[] dataBytes = data.getBytes();int plaintextLength = dataBytes.length;if (plaintextLength % blockSize != 0) {plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));}byte[] plaintext = new byte[plaintextLength];System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);byte[] encrypted = cipher.doFinal(plaintext);return new Base64().encodeToString(encrypted);} catch (Exception e) {e.printStackTrace();return null;}}/*** 解密方法* @param data 要解密的数据* @param key  解密key* @param iv 解密iv* @return 解密的结果* @throws Exception*/public static String desEncrypt(String data, String key, String iv) throws Exception {try {byte[] encrypted1 = new Base64().decode(data);Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);byte[] original = cipher.doFinal(encrypted1);String originalString = new String(original);return originalString;} catch (Exception e) {e.printStackTrace();return null;}}/*** 使用默认的key和iv加密* @param data* @return* @throws Exception*/public static String encrypt(String data) throws Exception {return encrypt(data, KEY, IV);}/*** 使用默认的key和iv解密* @param data* @return* @throws Exception*/public static String desEncrypt(String data) throws Exception {return desEncrypt(data, KEY, IV);}/*** 测试*/public static void main(String args[]) throws Exception {String test1 = "sa";String test =new String(test1.getBytes(),"UTF-8");String data = null;String key =  KEY;String iv = IV;// /g2wzfqvMOeazgtsUVbq1kmJawROa6mcRAzwG1/GeJ4=data = encrypt(test, key, iv);System.out.println("数据:"+test);System.out.println("加密:"+data);String jiemi =desEncrypt(data, key, iv).trim();System.out.println("解密:"+jiemi);}}


可以看到 sa 经过加密  COgQPJgLX+gLJGXkKGznJQ==

前端

  • npm install crypto-js

写相关js 函数

import CryptoJS from 'crypto-js/crypto-js'// 默认的 KEY 与 iv 如果没有给
const KEY = CryptoJS.enc.Utf8.parse("1234567890123456");
const IV = CryptoJS.enc.Utf8.parse('1234567890123456');
/*** AES加密 :字符串 key iv  返回base64 */
export function Encrypt(word, keyStr, ivStr) {let key = KEYlet iv = IVif (keyStr) {key = CryptoJS.enc.Utf8.parse(keyStr);iv = CryptoJS.enc.Utf8.parse(ivStr);}let srcs = CryptoJS.enc.Utf8.parse(word);var encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});// console.log("-=-=-=-", encrypted.ciphertext)return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);}
/*** AES 解密 :字符串 key iv  返回base64 **/
export function Decrypt(word, keyStr, ivStr) {let key  = KEYlet iv = IVif (keyStr) {key = CryptoJS.enc.Utf8.parse(keyStr);iv = CryptoJS.enc.Utf8.parse(ivStr);}let base64 = CryptoJS.enc.Base64.parse(word);let src = CryptoJS.enc.Base64.stringify(base64);var decrypt = CryptoJS.AES.decrypt(src, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);return decryptedStr.toString();
}

在相关模块中引入

  • import {Decrypt,Encrypt} from '@/plugins/cryptojs'

在vue  data()中定义 2个测试变量 d1,d2

在 template插入

<div>原数据: <el-input v-model="d1" placeholder="请输入内容"></el-input><el-button type="primary" @click="jiami" plain>加密</el-button><el-button type="primary" @click="jiemi" plain>解密</el-button>加密数据: <el-input v-model="d2" placeholder="请输入内容"></el-input></div>

在methods  插入函数

//加密
jiami(){console.log("加密-----",this.d1);let dd = Encrypt(this.d1)console.log(dd)this.d2= dd
},//解密
jiemi(){console.log("解密-----",this.d2);this.d1= Decrypt(this.d2)
}/********************加解密结果***********************/
encrypt('sa' , 'AES');
encrypt: COgQPJgLX+gLJGXkKGznJQ==
> "COgQPJgLX+gLJGXkKGznJQ=="

效果

最终 完成 想要的功能.

Vue前端和Java后端 联调使用AES 前后端加密解密相关推荐

  1. angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现

    今天实现了下AES和RSA加密解密,主要的功能是对前后端交互数据进行加密解密,为什么要用到两个算法呢,首先RSA默认的话加密长度是有限的100多个byte吧大约,并且需要公钥私钥,而AES加密没有限制 ...

  2. AES前后端加密解密

    AES前后端加密 关于AES-来自百度百科 后端代码 前端代码 关于AES-来自百度百科 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称R ...

  3. 一个后端程序员如何被公司逼的开始写前端代码!奉劝各位最好选择前后端分离的公司...

    hello~各位读者好,我是鸭血粉丝(大家可以称呼我为「阿粉」),在特殊的日子里,大家要注意安全,尽量不要出门,无聊的话,就像阿粉一样,把时间愉快的花在学习上吧. 事情起因 阿粉自从学会Java以来, ...

  4. Java精品项目源码前后端分离项目第17期基于遗传算法学校排课系统

    Java精品项目源码前后端分离项目第17期基于遗传算法学校排课系统 大家好,小辰今天给大家介绍一个基于遗传算法学校排课系统,演示视频文章末尾公众号(小辰哥的java)对号查询观看即可 文章目录 Jav ...

  5. Go Nodejs Java Aes 128 ECB加密解密结果保持一致

    在多语言的生产环境下,常常是由一种语言进行加密而由另一种语言来进行解密,因此有必要保持各种语言之间加密解密算法的一致性.下面列出了Go,Nodejs,Java 的 Aes-128-Ecb的加密解密算法 ...

  6. 商城前后端prd文档/经销商门户/瓶箱回收系统/组织管理平台/系统管理后台/商城文档/司机管理移动端原型/电商前后端原型/电商前后端需求文档//运输公司管理/产品库管理/资金管理/移动端电商原型文档

    商城前后端prd文档/经销商门户/瓶箱回收系统/组织管理平台/系统管理后台/商城文档/司机管理移动端原型/电商前后端原型/电商前后端prd文档/后台管理系统原型/运输公司管理/产品库管理/资金管理/移 ...

  7. A19.从零开始前后端react+flask - 删除前后端数据

    接上文 A18.从零开始前后端react+flask - 修改前后端数据 一 找到HomePage.js中 <Icon type="close" title="删除 ...

  8. python aes 加盐 加密解密

    python aes 加盐 加密解密 爬虫就是在学习的过程,前几天从某网站的js里学到的加密方式,通过下断点弄清加密原理后,用python复现一下,在这里和大家分享下 #--------引入模块--- ...

  9. vue java 使用AES 前后端加密解密

    最近在项目中需要针对重要数据进行加密传输 在网上找了一大推加密方式 最终采用AES 加密 1.java端 package com.zk.web.util;/*** AES 128bit 加密解密工具类 ...

最新文章

  1. 网络工程师如何才能实现职位晋升
  2. 计算机体系结构:嵌入式方法_计科考研里的【计算机系统结构、计算机软件与理论、计算机应用技术】都是什么意思?...
  3. 将来,你会成为这三种程序员之一
  4. Python基础入门:使用openpyxl读写Excel文件
  5. springmvc工作流程详解_软装设计师工作流程详解
  6. 使用sysbench对mysql压力测试
  7. php5.3无法加载mysql数据库模块_PHP_php5.3不能连接mssql数据库的解决方法,本文实例讲述了php5.3不能连接m - phpStudy...
  8. 我的osu游戏程序设计(oo)
  9. arduino 蓝牙示例_Arduino简单实例之八_蓝牙模块
  10. 高考340分理科学计算机,2021年高考340分可以上什么大学 340分左右的院校
  11. json类型大小 mysql_MySQL数据类型 - JSON数据类型 (1)
  12. 大学生心理健康管理系统
  13. tmb100a linux,天猫魔盒TMB100E短接降级官方1.7版本
  14. mdt 计算机名_配置 MDT 部署共享规则
  15. 安装广告拦截插件abp
  16. vijos 1082
  17. 计算机顶级水平,2009年的顶级电脑配置, 相当于中国现在电脑的什么水平?
  18. java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
  19. win10计算机升级系统,微软Win10升级助手
  20. tbody 不能充满table的原因

热门文章

  1. 数据库连接池问题[转]
  2. Node.js入门 - 永恒的Hello World!
  3. Linux(ubuntu)更换内核方法
  4. 【AI视野·今日CV 计算机视觉论文速览 第218期】Fri, 11 Jun 2021
  5. Java—Iterator接口介绍及使用
  6. Kubernetes—动态存储卷配置(StorageClass资源)(十二)
  7. 面试干货:Java核心技术问题整理
  8. Nginx学习之十一-Nginx启动框架处理流程
  9. 【算法学习】双调欧几里得旅行商问题(动态规划)
  10. 前端开发 容器标签 0226