当前位置: 首页 > news >正文

vue登陆密码加密,java后端解密

前端

  • 安装crypto-js
npm install crypto-js
  • 加密
//引入crypto-js
import CryptoJS from 'crypto-js';/** ---密码加密 start--- */
const SECRET_KEY = CryptoJS.enc.Utf8.parse("a15q8f6s5s1a2v3s");
const SECRET_IV = CryptoJS.enc.Utf8.parse("a3c6g5h4v9sss3v5");function encrypt(pwd) {let srcs = CryptoJS.enc.Utf8.parse(pwd);let encrypted = CryptoJS.AES.encrypt(srcs, SECRET_KEY, {iv: SECRET_IV ,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding})return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
/** ---密码加密end--- */

登陆之前调用encrypt给pwd加密

const password = encrypt(userInfo.password);

后端

解密工具类CryptoUtil

import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;/*** Description: 配合前端CryptoJS实现加密、解密工作。* CryptoJS 是一个 JavaScript 库,提供了一系列密码学函数和工具,用于加密、解密、生成摘要等任务。* 它支持多种加密算法,包括常见的对称加密算法(如 AES、DES)和非对称加密算法(如 RSA)。*/
public class CryptoUtil {//秘钥和偏移量,要和前端一样private final static String IV = "a3c6g5h4v9sss3v5";private final static String KEY = "a15q8f6s5s1a2v3s";/*** 加密算法,使用默认的IV、KEY* @param content* @return*/public static String encrypt(String content){return encrypt(content,KEY,IV);}/*** 解密算法,使用默认的IV、KEY* @param content* @return*/public static String decrypt(String content){return decrypt(content,KEY,IV);}/*** 加密方法* @param content* @param key* @param iv* @return*/public static String encrypt(String content, String key, String iv){try{Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");int blockSize = cipher.getBlockSize();byte[] dataBytes = content.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("UTF-8"), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes("UTF-8"));cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);byte[] encrypted = cipher.doFinal(plaintext);return new Base64().encodeToString(encrypted);}catch (Exception e) {throw new RuntimeException("加密算法异常 CryptoUtil encrypt()加密方法,异常信息:" + e.getMessage());}}/*** 解密方法* @param content* @param key* @param iv* @return*/public static String decrypt(String content, String key, String iv){try {byte[] encrypted1 = new Base64().decode(content);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);return new String(original).trim();} catch (Exception e) {throw new RuntimeException("加密算法异常 CryptoUtil decrypt()解密方法,异常信息:" + e.getMessage());}}
}

解密

password= CryptoUtil.decrypt(password);

在这里插入图片描述

http://www.lryc.cn/news/380339.html

相关文章:

  • npm 安装踩坑
  • 内容安全复习 6 - 白帽子安全漏洞挖掘披露的法律风险
  • dp经典问题:爬楼梯
  • 示例:推荐一个基于第三方QRCoder.Xaml封装的二维码显示控件
  • 阿里云服务器618没想到这么便宜,买早了!
  • 提升Python技能的七个函数式编程技巧
  • 微型操作系统内核源码详解系列五(五):cm3下Pendsv切换任务上篇
  • Django测试平台搭建学习笔记1
  • 本地离线模型搭建指南-RAG架构实现
  • 【IPython 使用技巧整理】
  • 什么是孪生素数猜想
  • Python学习笔记16:进阶篇(五)异常处理
  • Mac 安装依赖后依旧报错 ModuleNotFoundError: No module named ‘Crypto‘
  • 【07】持久化-数据库选择和设计
  • 压力测试
  • C语言| 数组元素的删除
  • QListView、QTableView或QTreeView截取滚动区域(截长图)
  • 论文《Tree Decomposed Graph Neural Network》笔记
  • 控制下属很简单,用好这3大管人绝招,再跳的刺头也不敢造次
  • 2.APP测试-安卓adb抓取日志
  • 高考填报志愿选专业,要善于发掘自身优势
  • 如何在 Ubuntu 14.04 上使用 HAProxy 实现 SSL 终止
  • dockercompose
  • 「51媒体」活动会议,展览展会,直播曝光的一种方法
  • Go WebSocket入门+千万级别弹幕系统架构设计
  • uniapp使用伪元素实现气泡
  • 字节跳动:从梦想之芽到参天大树
  • 组合数学、圆排列、离散数学多重集合笔记
  • 网络技术原理需要解决的5个问题
  • 【数据结构】链表的大概认识及单链表的实现