解决前端如何使用插件crypto-js进行AES加密方式数据加密

2023-05-16

 一、问题

目录

 一、问题

 1.1 问题概述

1.2 操作过程描述

二、解决

2.1 说明

2.2 crypto-js安装

2.3 使用crypto-js


 1.1 问题概述

如何进行加密和解密以及采用什么方式进行加密解密是本文主要解决的内容~
之前有小伙伴问了关于加密解密的事,确实是的,某些比较特殊的场景下,由于数据的敏感性以及特殊性,这些前后端的数据交互是需要进行加密传输的,比如账号、密码等信息需要通过加密往后台发送,而后台接口传递到前台的数据也需要进行解密后显示~

1.2 操作过程描述

本文主要的展示方法是 前端加密解密 的方法,主要的语言为TypeScript(和JavaScript没啥区别),去掉类型即可,采用的加密方式AES进行的对称加密,借助的工具库是 crypto-js,由crypto-js 实现了数据的AES加密解密~

二、解决

2.1 说明

要明白的是加密解密是一项需要 前后端协同的事,不是单方面可以做的,比如前端进行了AES加密,那自然后端使用时就需要对数据进行AES解密,同理,后端将数据进行AES加密后传输到前台,前台自然也需要进行AES解密后进行使用;
这里在简单说一下什么是AES,简单的说就是一种 对称加密,它的 优点 是 算法公开、计算量小、加解密的效率高、加密速度快(加密和解密使用相同的密钥),也正因为由于加密解密使用相同的密钥,这就导致 缺点 也很明显,密钥的管理和分发上比较困难,不是非常安全,密钥管理负担很重;毕竟需要同步管理前后端的密钥,且存在密钥被获取的风险,但总体来讲,这总比没有加密来的好~

2.2 crypto-js安装

和其它插件一样,crypto-js 的安装来自于npm库

npm install crypto-js -S

安装完成后,会在package.json文件中新增一条安装记录,如下

当然,如果和我一样是TypeScript的项目,那么还需要安装类型描述文件 @types/crypto-js

npm install @types/crypto-js -S

2.3 使用crypto-js

整体方法如下:

import CryptoJS from 'crypto-js';

// 这是密钥,非常重要,可以是后台获取,或者是前后台约定好,注意保护
const key = CryptoJS.enc.Utf8.parse('xxxxxxx');
const iv = CryptoJS.enc.Utf8.parse('xxxxxxx');

/**
 * 解密
 * @param {String} word 解密内容
 * @returns
 */
function decrypt(word: string) {
    let base64 = CryptoJS.enc.Base64.parse(word);
    let src = CryptoJS.enc.Base64.stringify(base64);

    let decrypt = CryptoJS.AES.decrypt(src, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    });

    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}

/**
 * 加密
 * @param {String} word 加密内容
 * @returns
 */
function encrypt(word: string) {
    let srcs = CryptoJS.enc.Utf8.parse(word);
    var encrypted = CryptoJS.AES.encrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    });
    return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
export { decrypt, encrypt };

export default {
    encrypt,
    decrypt
};

单独一个文件,或者写一个类都行,其中encrypt是加密,decrypt方法是加密,具体演示效果如下

encrypt加密方法及效果演示

console.log('encrypt()加密演示');
console.log('原始值为:12345678');
console.log('加密后的值为:' + aes.encrypt('12345678'));

decrypt加密方法及效果演示

对上方加密后的值进行解密:

console.log('encrypt()加密演示');
console.log('原始值为:12345678');
const encryptValue = aes.encrypt('12345678');
console.log('加密后的值为:' + encryptValue);

console.log('-----------');

console.log('decrypt()解密演示');
console.log('decrypth后的值:' + aes.decrypt(encryptValue));

 从结果看,原始值为::12345678,加密后的值为:WZMnGz2lRnv7b1h+iOysLA==,再对该值进行解密,解密后的值为:12345678,两者相等,因此加密解密成功~

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

解决前端如何使用插件crypto-js进行AES加密方式数据加密 的相关文章

  • Rust学习入门--【12】Rust 循环

    系列文章目录 Rust 语言是一种高效 可靠的通用高级语言 xff0c 效率可以媲美 C C 43 43 本系列文件记录博主自学Rust的过程 欢迎大家一同学习 Rust学习入门 1 引言 Rust学习入门 2 Rust 开发环境配置 Ru
  • 一年有多少节假日

    日历有 阳历 xff08 公历 xff09 和 阴历 xff08 农历 xff09 之分 每年都有法定节假日 xff0c 这些分成三类 双休 阳历节假日 阴历节假日 双休 1 xff09 周六和周日 2 2 天 阳历节假日 1 xff09
  • 走迷宫(bfs)

    给你一个 n 行 m 列的二维迷宫 39 S 39 表示起点 xff0c 39 T 39 表示终点 xff0c 39 39 表示墙壁 xff0c 39 39 表示平地 你需要从 39 S 39 出发走到 39 T 39 xff0c 每次只能
  • 计蒜客-蒜头君回家(bfs)

    蒜头君要回家 xff0c 但是他家的钥匙在他的朋友花椰妹手里 xff0c 他要先从花椰妹手里取得钥匙才能回到家 花椰妹告诉他 xff1a 你家的钥匙被我复制了很多个 xff0c 分别放在不同的地方 蒜头君希望能尽快回到家中 xff0c 他需
  • 互质数的个数(短除法分解质因数+欧拉函数)

    题意说明 xff1a 给出一个n xff0c 求1 n互质数的个数 include lt cstdio gt include lt cmath gt using namespace std int res 100000 int main i
  • arduino +ESP8266 网页WiFi控制

    首先几个问题 xff1a 1 xff0c 关于连线 xff0c 很简单 xff0c 直接ESP8266与arduino连接 xff0c 就五根线 如果没有弄好 xff0c 就单独调试一下 VCC xff0c CH PD连5v的 xff08
  • 蓝桥杯分考场

    历届试题 分考场 时间限制 xff1a 1 0s 内存限制 xff1a 256 0MB 问题描述 n个人参加某项特殊考试 为了公平 xff0c 要求任何两个认识的人不能分在同一个考场 求是少需要分几个考场才能满足条件 输入格式 第一行 xf
  • CCF_Markdown(正则表达式)

    试题编号 xff1a 201703 3试题名称 xff1a Markdown时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 问题描述 Markdown 是一种很流行的轻量级标记语言 xff08 lig
  • idea常用的插件

    1 lombok 省略get set方法 2 Alibaba Java Coding Guidelines 阿里的代码规范 3 Translation 谷歌中英文翻译工具 4 CodeGlance 代码迷你缩放图插件 xff0c 快速下拉拖
  • Hadoop windows本地环境安装

    hadoop使用java编写 xff0c 所以windows安装和java一样也需要配置环境变量 一 下载所需文件 JDK下载地址 xff0c jdk1 8下载Hadoop下载 xff0c hadoop下载 xff0c 进去后找到一个版本然
  • Gitlab的安装及使用

    1 GitLab概述 1 1 GitLab介绍 GitLab是利用Ruby on Rails一个开源的版本管理系统 xff0c 实现一个自托管的Git项目仓库 xff0c 可通过Web界面进行访问公开的或者私人项目 GitLab能够浏览源代
  • C语言例程:用二维数组实现矩阵转置

    用二维数组实现矩阵转置 本实例将输入的 3 4 矩阵转置为 4 3 矩阵 xff0c 并输出结果 通过本实例 xff0c 可以学习如何使用二 维数组 实例解析 二维数组的定义 二维数组定义的一般形式为 xff1a 第一部分 基础篇 X227
  • C++头文件的相互引用问题(#include” xxx“使用)

    188条消息 C C 43 43 头文件的引用问题 xff08 include使用 xff09 保护大苹果 CSDN博客 c 43 43 include头文件
  • 树莓派设置自动连接无线网络

    树莓派开机后自动连接无线网络方法 xff0c 亲测有效 1 在任意方法 xff08 无线或有线 xff09 已经连接树莓派的基础上 xff0c 执行该命令 xff0c 意思是编辑wpa supplicant conf这个文件 内容如下 xf
  • 常用快捷键(1)----Windows组合键

    单个的Windows键是打开和隐藏开始菜单 xff0c 功能与 Esc 43 Ctrl 组合键功能相同 下面是一些常用的Windows组合键 xff1a 1 快捷键 xff1a Windows 43 Shift 43 S 功能 xff1a
  • android 获取唯一Id,小小总结一下。仅供参考

    1 获取imei xff1a 前言 xff1a 因传统的移动终端设备标识如国际移动设备识别码 xff08 IMEI xff09 等已被部分国家认定为用户隐私的一部分 xff0c 并存在被篡改和冒用的风险 xff0c 所以在Android 1
  • xib中添加自定义可编辑属性

    IOS开发中 xff0c 有些人喜欢使用xib来进行项目的开发 xff0c 使用xib可以使界面可视化 xff0c 很多控件的属性设置都可以在 xib 中设置 xff0c 减少了代码量 xff1b 同时不用一遍遍的运行程序看效果 xff0c
  • STM32使用寄存器工程模板点亮一个LED灯

    1 环境说明 xff08 1 xff09 使用的是普中STM32F103开发板 xff08 2 xff09 keil 5软件 2 目的 点亮开发板上的LED1灯 3 步骤 xff08 1 xff09 定义一系列寄存器的宏 span clas
  • 结构体数组的使用

    测试源码 span class token macro property span class token directive keyword include span span class token string lt stdio h
  • string字符串拼接

    功能描述 实现在字符串末尾拼接字符串 函数原型 xff1a string amp operator 43 61 const char str 重载 43 61 操作符string amp operator 43 61 const char

随机推荐