Vue AES+MD5加密 后台解密

2023-10-27

前端VUE
vue项目中安装crypto-js
npm install crypto-js --save-dev

CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。目前已支持的算法包括:

  • MD5
  • SHA-1
  • SHA-256
  • AES
新建aes.js
  • \src\utils\目录下新建aes.js文件
import Vue from 'vue'
import CryptoJS from 'crypto-js'

// AES-128-CBC偏移量
const CBCIV = "abcdefgabcdefg12";

export default {
    //加密
    encrypt(data){
        data = CryptoJS.MD5("copyright." + data + "pms@2016").toString();
        let key = CryptoJS.enc.Utf8.parse(CBCIV);
        let secretData = CryptoJS.enc.Utf8.parse(data);
        let encrypted = CryptoJS.AES.encrypt(
            secretData,
            key,
            {
                iv: CryptoJS.enc.Utf8.parse(CBCIV),
                mode:CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            }
        );
        return encrypted.toString();
    },

    //解密
    decrypt(data){
        let key = CryptoJS.enc.Utf8.parse(CBCIV);
        let decrypt = CryptoJS.AES.decrypt(
            data,
            key,
            {
                iv: CryptoJS.enc.Utf8.parse(CBCIV),
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });
        return CryptoJS.enc.Utf8.stringify(decrypt).toString();
    }
}
调用
  • 在需要使用加密的页面中引用aes.js
import aes from "@/utils/aes";
/**
 * 密码加密
 */
test() {
  console.log("原密码:" + "P@ssw0rd");
  let encryptPassword = aes.encrypt('P@ssw0rd');
  console.log("加密后:" + encryptPassword);
  let decryptPassword = aes.decrypt(encryptPassword);
  console.log("解密后:" + decryptPassword);
},

在这里插入图片描述

后台Spring Boot
Aes.java
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

public class Aes {
    //密钥 (需要前端和后端保持一致)
    private static final String KEY = "abcdefgabcdefg12";  

    public static void main(String[] args) throws Exception {  
    	String encryptPassword = "CfMIyhzijEobTbtG9W24d55CwINGrmIj70WqrtPVKmwpgm63Ks7KoKUUuFN5uZch";
    	System.out.println("解密前:" + encryptPassword);  
    	String decryptPassword = Decrypt(encryptPassword, KEY);
    	System.out.println("解密后:" + decryptPassword);  
    } 
    
    /**
     * 加密    
     * @param sSrc
     * @param sKey
     * @return
     * @throws Exception
     */
    public static String Encrypt(String sSrc, String sKey) throws Exception {  
        if (sKey == null) {  
            System.out.print("Key为空null");  
            return null;  
        }  
        // 判断Key是否为16位  
        if (sKey.length() != 16) {  
            System.out.print("Key长度不是16位");
            return null;  
        }  
        byte[] raw = sKey.getBytes("utf-8");  
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"  
        IvParameterSpec iv = new IvParameterSpec(sKey.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度  
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);  
        byte[] encrypted = cipher.doFinal(sSrc.getBytes());  
        return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。  
    }
    
    /**
    * 解密  
	* @param sSrc
	* @param sKey
	* @return
	* @throws Exception
	*/
	public static String Decrypt(String sSrc, String sKey) throws Exception {  
	   try {  
	       // 判断Key是否正确  
	       if (sKey == null) {  
	           System.out.print("Key为空null");  
	           return null;  
	       }  
	       // 判断Key是否为16位  
	       if (sKey.length() != 16) {  
	           System.out.print("Key长度不是16位");  
	           return null;  
	       }  
	       byte[] raw = sKey.getBytes("utf-8");  
	       SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  
	       Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");  
	       IvParameterSpec iv = new IvParameterSpec(sKey.getBytes());  
	       cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);  
	       byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密  
	       try {  
	           byte[] original = cipher.doFinal(encrypted1);  
	           String originalString = new String(original,"utf-8");  
	           return originalString;  
	       } catch (Exception e) {  
	           System.out.println(e.toString());  
	           return null;  
	       }  
	   } catch (Exception ex) {  
	       System.out.println(ex.toString());  
	       return null;  
	   }  
	}

}

  • 经常用到的加密场景大多就是登录密码加密了,在这里就不做具体的登录传输密码了,将前台MD5+AES加密后的密码拿来解密,模拟接收到登录密码后进行验证,从代码可以看出无论是前后台的解密都只是AES,在这里我们并不进行MD5解密,因为目前似乎还没有实现java解密MD5,数据库存储AES解密后的密码就可以了,运行main方法可以看到解密后的密码与前端解密一致,至此,将解密后的密码与数据库存储的AES解密后的密码拿来比对就行
    在这里插入图片描述


- End -
- 个人学习笔记 -
- 仅供参考 -

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue AES+MD5加密 后台解密 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • SpringBoot2.0(过滤器,监听器,拦截器)

    目录 一 过滤器 1 1 自定义Filter 1 2 启动类代码 1 2 创建filter类和LoginFilter包 1 2 1 编写loginFilter类 过滤器代码 1 2 2 创建二个Controller类 二 监听器 2 1 自
  • 2023年智能车辆国际会议(ICoIV 2023)

    2023年智能车国际会议 ICoIV 2023 重要信息 会议网址 www icoiv org 会议时间 2023年5月26 28日 召开地点 中国长沙 截稿时间 2023年3月20日 录用通知 投稿后2周内 收录检索 EI Scopus
  • 利用php的mail()函数发送邮件

    利用PHP的mail函数发送邮件 mail 函数的作用 连接到邮件服务器 利用smtp协议 与该服务器交互并投邮件 注意 1 mail函数不支持esmtp协议 即只能直投不能登录 2 由上条知 我们只能直投至最终的收件服务器地址 而该地址需
  • Vuex——控制侧边栏是否折叠使用vuex,本次简单使用到了state,mutations

    项目中在store vuex js 使用vuex管理isCollapse export default state isCollapse false 默认不折叠 mutations collapseMenu state state isCo
  • 中国蚁剑安装使用教程

    中国蚁剑安装使用教程 前言 一 中国蚁剑安装 二 中国蚁剑使用 2 1中国蚁剑连接木马 2 2中国蚁剑设置代理 2 3中国蚁剑参数设置 2 4中国蚁剑其他使用 三 中国蚁剑绕过Waf 3 1 编码绕过WAF 3 2插件绕过waf 3 3 修
  • windows ce操作系统能用哪个导航_Windows 和 Linux 比较

    1 操作系统设计复杂度对比 就操作系统复杂度windows server 要比 linux server 更复杂 2 市场占有率对比 特指的服务器市场占有率 非PC桌面 1 linux 大多数版本是免费的 windows 收费 在大规模集群
  • 基于matlab的长短期神经网络lstm的股票预测

    目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的股票预测 MATALB编程实现 附有代码 及链接基于matlab编程的的长短期神经网络LSTM的股票价格的预测 基于深度学习神经网络的股票价格预测 深度学
  • Unity 中控(二)

    前面写到控制投影 接着就是对电脑的开关的控制 依然是先到网上查资料 然后总结下 在同一局域网下 远程开电脑是同通过网卡的Mac地址 UDP广播数据实现开机 关机是调用系统的运行命令 shutdown s m 192 168 0 106 t
  • 10个每个人都用得到的视频下载网站

    1 油管视频下载 www 4kvideodownloader com 2 哔哩哔哩视频解析下载 bilibili iiilab com 3 小视频下载 www downfi com video 4 图二工具 www tool2 cn 5 小
  • Spring MVC-表单(Form)标签-文件上传(File Upload)示例(转载实践)

    以下内容翻译自 https www tutorialspoint com springmvc springmvc upload htm 说明 示例基于Spring MVC 4 1 6 以下示例显示如何使用Spring Web MVC框架在表
  • k8s 之二 kubeadm安装k8s集群

    1 概述 k8s的部署常见的工具和环境 1 IaaS 虚拟机 1 1托管模型 部署在公有云上 K8SaaS 目前没有用于生产环境 1 2VPS 和本地物理机搭建一样 但是这里网络是虚拟网络了 2 物理机 3 1 构建工具 Rancher 2
  • 面向ASIC设备的编译器框架:TVM or MLIR?

    2019 2021年 摩尔定律失效 这一关键词频频出现于各大技术网站 在此背景下 市面上多如牛毛的AI芯片公司不约而同地给出了通用CPU 专用ASIC芯片的方案 以应对日益增长的AI边 端侧推理计算需求 在AI DSA芯片的开发实践中 棘手
  • jar包打成docker镜像文件推送至服务器,服务器拉取并重启容器

    windows电脑需要去docker官网下载Docker Desktop 这里需要注意两点 windows电脑需要开启hyper v 控制面板 所有控制面板项 程序和功能 启用或关闭Windows功能 勾选上 然后等待系统重启应用 Dock
  • 关于NgRx的状态管理

    什么是NgRx 简单的讲 NgRx 是继 Redux 之后 结合 RxJs 的产物 可以说 它是 Angular 天生的 伴侣 帮助 Angular 做状态管理 NgRx 主要有三种模式 分别为 NgRx Store NgRx Effect
  • Android VLC播放器二次开发1——程序结构分析

    最近因为一个新项目需要一个多媒体播放器 所以需要做个视频 音频 图片方面的播放器 也查阅了不少这方面的资料 如果要从头做一个播放器工作量太大了 而且难度也很大 所以最后选择了VLC作为基础 进行二次开发 选择VLC的原因有两个 第一 VLC
  • 文件夹权限禁用和解除禁用

    1 文件夹权限禁用 右键文件夹 属性 安全 选择对应的用户 编辑 拒绝一栏打钩 确定 然后你会发现 文件夹对应的权限没有了 无法打开文件夹 无法重命名等 1 文件夹权限解除禁用 文件夹右键 属性 安全 高级 继续 删除禁用的用户
  • Altium Designer(AD)软件使用记录08-PCB布局部分

    目录 Altium Designer AD 软件使用记录08 PCB布局部分 一 交互是模块化抓取的设置 二 模块化及PCB 的预布局分析 三 核心最小系统 DSP SDRAM FLASH 及拓扑结构分析 四 基于CPLD 的模块布局 五
  • Day2 R (Rstudio) 的更新,R 中包的安装与更新

    1 R Rstudio 的更新与安装 R 的安装请参考官网 R的更新 Windows install packages installr require installr updateR Mac 安装devtools包 如果已经安装 跳过此
  • H5页面不同屏幕适配:纯CSS方案

    背景 UI给出的设计稿 一般是以iphone6屏幕大小为准 也就是宽高为375 667 激进一些的还会使用414 736的设计稿 在其他不同尺寸的屏幕上适配的问题也就由此诞生 一般新搭建的项目都要处理这个问题 常见方案 目前市面上比较常见的
  • Vue AES+MD5加密 后台解密

    前端VUE vue项目中安装crypto js npm install crypto js save dev CryptoJS crypto js 为 JavaScript 提供了各种各样的加密算法 目前已支持的算法包括 MD5 SHA 1