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

news2024/11/19 16:36:27

 一、问题

目录

 一、问题

 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,两者相等,因此加密解密成功~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pdfbox / XSL + FOP 转换 PDF文档

XSL-FO是XSL Formatting Objects的缩写,它是一种用于文档格式的XML 置标语言。XSL-FO是XSL的一部分,而XSL是一组定义XML数据转换与格式的W3C技术。XSL的其他部分有XSLT与XPath。 XSL-FO是用于格式化XML数据的语言,全称为Extensible Styleshe…

python基础讲解 02

人工智能学习基础四剑客(库)Numpy ( Numerical Python)使用创建随机数组查看数组的属性数组与标量之间的计算四剑客(库) Python被大量应用在数据挖掘和深度学习领域,其中使用极其广泛的是Numpy(N维数组对象和向量运算&…

Nessus学习

攻击主机: Kali 192.168.11.106靶机:windows server 2008 r2 192.168.11.134 x64 32位nessus实验原理:利用漏洞扫描器能够自动应用漏洞扫描原理,对目标主机安全漏洞进行检测,附带识别主机漏洞的特征库的功能&#xf…

使用客户端证书登录MySQL

使用客户端证书登录MySQL登录MySQL具有安全性高、不用输入密码的优点,这里说明生成证书和登录的过程。 实验环境是Linux上的的MySQL 8.0.31社区版。 生成证书 使用openssl req创建X.509证书,下面的命令创建有效期10年的私钥,使用man req可…

Kali Linux中shutdown指令的用法3-3

3 TIME介绍 TIME是shutdown指令的第二个参数,用来表示实现关机计划的时间,如果不指定TIME,则默认是1分钟之后实现关机计划。 3.1 通过hh:mm格式指定时间 可以通过hh:mm格式指定关机的具体时间,其中hh表示小时,mm表示…

CredSSP加密数据库修正

新部署的机器,远程登录时,提示如下: 原因是注册表里面缺少东西,新建一个文本文件,复制如下内容保存,然后将保存的文本文件保存为后缀为reg的可执行文件 Windows Registry Editor Version 5.00[HKEY_LOCAL_…

【Django项目开发】权限相关的模型设计(五)

文章目录一、什么是权限二、RBAC模型三、权限模型类设计1、需要设计那些字段2、特别注意四、角色模型类设计1、需要定义的字段有2、 多对多模型类设计(重点)五、用户模型类设计(前面已经设计好了)六、菜单模型类设计(前面已经设计好了)七、总结:上面4个表的关联关系为:如下八、…

Spring注解详解(使用注解的方式完成IOC)

补充:xml配置 最开始(Spring 1.x),Spring都是通过xml配置控制层(controller)--业务逻辑层(service)--dao层--数据源的关系,但是比较复杂 Spring 2.x的时候,随着JDK1.5支持注解的方式,实现了 "xml 注解" 的开…

Vue自定义指令,自定义插件,过滤器,混入,nextTick

自定义指令:自己定义类似指令的技术。V-开关的特殊属性,是一个对象,自己定义其作用。 指令: v-特殊属性 * vue内置指令: v-html v-text v-pre * v-bind v-on v-if v-show v-for …

我的前端学习经历

我最近在开发一个NFT相关的Saas,部分截图如下:这是我一段时间前,朋友圈发的图,现在Saas在页面上有点变化,但懒得再截图了。客观而言,布局还可以,这一套的技术栈是:React TailwindCs…

​无线数据终端DTU的电路防护元器件推荐产品型号

​无线数据终端DTU是专门用于将串行数据转换为IP数据或将IP数据转换为串行数据通过无线通信网络传输的无线终端设备,因此对于它来说ESD静电放电及雷击浪涌的防护显得尤其重要。 DTU已广泛应用于电力、环保、LED信息发布、物流、水文、气象等行业,其硬件…

【人工智能原理自学】方差代价函数:知错

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。 🔔本文讲解一元一次函数感知器:如何描述直觉,一起卷起来叭! 目录…

[oeasy]python0037_字符画艺术_asciiview_自制小动物_imagick_asciiart

牛说(cowsay) 回忆上次内容 我们狂飙了一路 从用shell 直接执行 python程序到用shell 循环执行 python程序 循环体中 把 python的 输出结果 用管道 交给了 figlet 把 figlet的 输出结果 用管道 交给了 cowsay 把 cowsay的 输出结果 用管道 交给了 lolcat 最后 提权 直接运行 s…

课程设计 | 学生成绩管理系统

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

减小 Go 代码编译后的二进制体积

1 基线用例 减小编译后的二进制的体积,能够加快程序的发布和安装过程。接下来呢,我们分别从编译选项和第三方压缩工具两方面来介绍如何有效地减小 Go 语言编译后的体积。 我们采用同一个测试工程来测试不同方式的效果。 使用的测试工程如下&#xff0…

SQL全自动化检查神器

介绍 Yearning MYSQL 是一个SQL语句审核平台。提供查询审计,SQL审核等多种功能,支持Mysql,可以在一定程度上解决运维与开发之间的那一环,功能丰富,代码开源,安装部署容易! 功能介绍 SQL查询查询…

Prometheus配合 alertmanager 使用邮箱报警

部署Prometheus 和 Alertmanager略 安装包部署prometheusGrafananode_exporter_争取不加班!的博客-CSDN博客 prometheus监控报警部署Alertmanager_争取不加班!的博客-CSDN博客 编辑Alertmanager配置文件 vim alertmanager/alertmanager.yml global: res…

MySQL高可用之主备同步:MySQL是如何保证主备一致的

🏆今日学习目标: 🍀MySql是如何保证主备一致的 ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加入:…

【Java编程进阶】封装继承多态详解

推荐学习专栏:Java 编程进阶之路【从入门到精通】 文章目录 1. 封装2. 继承2.1 继承的语法2.2 子类重写父类的方法2.3 子类隐藏父类的方法2.4 super 关键字2.5 final 关键字2.6 父类子类类型转换3. 多态4. 总结Java 是一门面向对象程序设计语言,其具有封装,继承和多态三大特…

面向对象的特征之三:多态性

文章目录一、理解多态性二、什么是多态性三、多态性的使用——虚拟方法调用四、多态性使用前提五、适用范围六、虚拟方法调用详细介绍多态性是编译期的还是运行期的?举例每日一考七、instanceof关键字的使用引入:关于多态性的讨论向下转型:in…