vue中如何使用crypto-js,进行3DES的加密解密(实践好用)_vue 3des-程序员宅基地

技术标签: 加密解密  vue  Vue技术栈  

需求背景

项目中后端要求前端请求后台接口时对请求参数进行加密处理。
因为我的需求是加密可逆,后端要求使用3DES加解密,最后返回返回base64格式
加密过得,传给后端,后端再进行解密。

什么是3DES??

3DES(即Triple DES)是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。原版DES容易被破解,新的3DES出现,增加了加密安全性,避免被暴力破解。它同样是对称性加密,同样涉及到加密编码方式,及填充方式。
它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。

解决过程

  1. npm下载js包 ;Crypto里面可以把md5和3des一起做了,所以直接安装这个比较方便
npm i crypto-js
  1. 在 util.js引入新建 crypto.js 文件,对加密解密文件进行封装

message: 需要加解密的文本
key1: 加解密的秘钥
iv1: 偏移量,最短8位数,ECB模式不需要此参数


import cryptoJs from 'crypto-js';

//随机生成指定数量的16进制key
export const generatekey = (num) => {
    
    let library = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    let key = "";
    for (var i = 0; i < num; i++) {
    
        let randomPoz = Math.floor(Math.random() * library.length);
        key += library.substring(randomPoz, randomPoz + 1);
    }
    return key;
}
// DES(CBC)加密
export const encryptByCBC = function (message, key1, iv1) {
    
    let key = cryptoJs.enc.Utf8.parse(key1);
    let iv = cryptoJs.enc.Utf8.parse(iv1);
    let srcs = cryptoJs.enc.Utf8.parse(message);
    // 加密模式为CBC,补码方式为PKCS5Padding(也就是PKCS7)
    let encrypted = cryptoJs.TripleDES.encrypt(srcs, key, {
    
            iv: iv,
            mode: cryptoJs.mode.CBC,
            padding: cryptoJs.pad.Pkcs7
    });
    return cryptoJs.enc.Base64.stringify(encrypted.ciphertext);   //返回base64
}

// DES(CBC)解密
export const decryptByCBC = function (message, key1, iv1) {
    
    let key = cryptoJs.enc.Utf8.parse(key1);
    let iv = cryptoJs.enc.Utf8.parse(iv1);
    let base64 = cryptoJs.enc.Base64.parse(message);
    let src = cryptoJs.enc.Base64.stringify(base64);
    // 解密模式为CBC,补码方式为PKCS5Padding(也就是PKCS7)
    let decrypt = cryptoJs.TripleDES.decrypt(src, key, {
    
            iv: iv,
            mode: cryptoJs.mode.CBC,
            padding: cryptoJs.pad.Pkcs7
    });
    let decryptedStr = decrypt.toString(cryptoJs.enc.Utf8);
    return decryptedStr.toString();
  }


export default {
    
    encryptByCBC,
    decryptByCBC,
}
  1. 用的时候在相应的js文件里引入
import crypto from "@/utils/crypto.js";
var key = "xxxxxxxxx";
var iv = "xxx_xxxx";
var en_str = crypto.encryptByCBC(json_arr, key, iv);  //json_arr是要加密的内容
console.log('加密' + en_str);
var de_str = crypto.decryptByCBC(en_str, key, iv);
console.log('解密' + de_str);

需要注意的是:
加密时候需要对字符串加密,var json_arr = JSON.stringify(arr); //js对象转为JSON字符串
解密时候需要转为对象,this.de_str = JSON.parse(this.de_str); //JSON字符串转为一个对象

另外,做的过程中一开始我用的是DES加解密得cryptoJs.DES,后来在后端同事的提醒下更换成了3EDS的,唯一的区别就是这个可恶的cryptoJs.TripleDES
在这里插入图片描述

分享资料

分享一个可以自测加解密是否成功的工具网站,只需要按需求选择好,在输入待加解密的文本就好
http://tool.chacuo.net/crypt3des
在这里插入图片描述
附上做的过程中参考过不错的文章,希望也对大家有所帮助
关于 vue中使用crypto-js,进行DES 的加密解密
vue项目加密之CBC加密

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45811256/article/details/117392574

智能推荐

Java:ArrayList实现原理_java的arraylist增删改查的原理-程序员宅基地

文章浏览阅读1.3k次。ArrayList是List接口的可变数组的实现。它实现了List接口以及list相关的所以方法,**它允许所有元素的插入,包括null。**此外还提供一些方法来操作内部用来存储列表的数组的大小。除了实现 List 接口外, 每个ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是大于等于列表的大小。初始化ArrayList的时候,可以指定初始化容量的大小,如果不指定,就会使用默认大小,为10随着向ArrayList 中不断添加元素,其容量也自动增长。_java的arraylist增删改查的原理

arcgis计算栅格平均值_arcgis求栅格平均值-程序员宅基地

文章浏览阅读933次。打开FC栅格数据和非水体矢量数据利用矢量数据提取对应栅格的非水体部分2.1打开空间分析工具à提取分析à按掩膜提取输入对应栅格数据和矢量数据2.2提取结果如下进行计算FC平均值3.1打开空间分析工具à多元分析à波段集统计输入对应栅格和输出路径3.2统计结果如下..._arcgis求栅格平均值

ElasticJob - 任务执行过程解析_手动调用esjob simplejob-程序员宅基地

文章浏览阅读1.4k次。ElasticJob是基于Quartz实现的弹性分布式任务调度框架,整个任务触发的底层是Quartz来触发。LiteJob框架触发任务执行的开始,下面来分析任务的执行过程。public final class LiteJob implements Job { @Override public void execute(final JobExecutionContext context) throws JobExecutionException { //根据任务类型_手动调用esjob simplejob

实现一个抽奖活动的布局-程序员宅基地

文章浏览阅读361次,点赞8次,收藏7次。使用flex布局、百分比布局和媒体查询实现响应式布局,使用动画实现转动抽奖效果。

什么是MVVM?mvvm和mvc区别?_mvvn和mvc的区别-程序员宅基地

文章浏览阅读1.2k次。什么是MVVMMVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model 层代表数据模型, 也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模 型转化成UI 展现出来,ViewModel 是一个同步View 和 Model的对象。 在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel..._mvvn和mvc的区别

学校里学不到的调试技巧(初学者也可以看懂)_调试学不明白-程序员宅基地

学校里学不到的调试技巧:了解bug的概念,掌握调试的重要性和基本步骤,了解Debug和Release模式。在Windows环境下,准备调试环境,学习常用快捷键,查看程序当前信息,解决链接型和运行时错误。需要积累排错经验。

随便推点

ESP32环境搭建 HomeKit 平台搭建 苹果智能家居HomeKit_homekit esp32-程序员宅基地

文章浏览阅读7.1k次。本文所有操作环境在linux下,参考README文档,官方sdk获取连接https://github.com/espressif/esp-apple-homekit-adkHomeKit是Apple开发的框架,用于使用iOS设备与用户家里的连接附件进行通讯和控制。该项目是Apple的ESP32和ESP32S2开源HomeKit ADK的移植版本。任何开发人员都可以使用它来制作非商业智能家居配件的原型。第1步:IDF环境IDF分支 release/v4.2 ,然后拉去最新代码$git p._homekit esp32

目标检测视频,并保存识别结果_yolo保存视频检测结果-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏14次。#-------------------------------------## 调用摄像头检测#-------------------------------------#from keras.layers import Inputfrom yolo import YOLOfrom PIL import Imageimport numpy as npimport cv2yolo = YOLO()# 调用摄像头# capture=cv2.VideoCapture(1) # c_yolo保存视频检测结果

你如果是想弄算法,就去把他们论文啃透嘛-程序员宅基地

文章浏览阅读358次。你如果是想弄算法,就去把他们论文啃透嘛就像你去啃透一个项目一样。确实你单纯做出一个无人机,或者双目视觉+无人机,没有什么算法上的创新,方法代码都是用的别人的,你想达到别人那种发算法论文的地步对不对。就比如达到这种层面https://mp.weixin.qq.com/s/kGxESDvTPH2qltLey71Mbg我觉得你不用觉得没有进实验室没老师带你弄不了这方面,你可以自己去啃那些论文,论文本身是公开发表的。 你单单把那些论文啃透自身的理论水平就应该可以上...

使用SDK或RESTful API调用云平台的服务_java restful-sdk-程序员宅基地

文章浏览阅读1.1k次。作者:禅与计算机程序设计艺术 1.简介随着物联网技术的迅速发展、应用场景的拓展以及数据量的增加,越来越多的人开始关注如何通过云平台实现应用的快速开发、部署和迭代。而云平台通常都提供了丰富的API接口,帮助开发者更加方便地访问平台的功能。本文将从云计算的角度出发,详细介绍在企业内部系统之间进行集成的两种_java restful-sdk

总结ThinkPHP使用技巧经验分享(一)-程序员宅基地

文章浏览阅读88次。约定:1.所有类库文件必须使用.class.php作为文件后缀,并且类名和文件名保持一致2.控制器的类名以Action为后 缀3.模型的类名以Model为后缀,类名第一个字母须大写4.数据库表名全部采用小写,如:数据表名: 前缀_表名模型类名: 表名Model 注:这里的表名第一个字母要大写创建对象: D('表名') 注:这里的表名第一个字母要大写定义控制器类class IndexAction e..._thinkphp技巧

ubuntu (qt)软件安装如何解决"无法打开共享目标文件 libudev.so. 0"错误?_libudev.so.0-程序员宅基地

文章浏览阅读1.1k次。拷贝至::问题:尝试在 Ubuntu 64上运行游戏开发。 它询问上面的对象。我跑了 sudo apt-get install libudev1:i386 而且已经安装好了。我有 /lib/i386-linux-gnu/libudev.so.1 但没有 libudev.so.0。回答 1:对于 64位 Ubuntu,它位于 32位 libudev0包中。你可以使用以下命令安装:复..._libudev.so.0