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

Vue3 使用CryptoJS加密

为什么要加密?

现在的互联网世界充满了各种各样的信息,有些信息非常重要,比如密码、个人信息等。如果我们把这些信息直接发送到服务器,别人可能会截取到,然后偷走我们的信息。为了避免这种情况发生,我们需要把重要的信息变成别人看不懂的东西,这就是加密的作用。

CryptoJS 是什么?

CryptoJS 是一个非常好用的 JavaScript 库,它能帮我们加密和解密信息。这个库很小巧,而且功能很强大,支持很多种加密方法。我们这里主要用它的 AES 加密功能。

如何安装 CryptoJS?

首先,我们需要在项目里安装 CryptoJS。可以用下面的命令来安装:

npm install crypto-js

或者

yarn add crypto-js

如何加密和解密?

现在我们已经有了 CryptoJS,接下来就可以写代码来加密和解密信息了。

密钥和偏移量

加密需要一把“钥匙”,这把钥匙就是密钥。另外还有一个叫“偏移量”的东西,它可以帮助我们更好地加密信息。这两个东西一定要保密,不能让别人知道。

import * as CryptoJS from "crypto-js";// 密钥和偏移量
// 这里使用环境变量来设置密钥和偏移量,确保它们的安全性
const key = CryptoJS.enc.Utf8.parse(process.env.VUE_APP_KEY);
const iv = CryptoJS.enc.Utf8.parse(process.env.VUE_APP_IV);
加密函数

我们写一个函数来加密信息。这个函数接收一段明文(也就是正常能看懂的文字),然后返回加密后的文字。

// AES加密函数
export function encrypt(text: string): string {// 使用 CryptoJS 的 AES 方法加密文本const encrypted = CryptoJS.AES.encrypt(text, key, {mode: CryptoJS.mode.ECB, // 使用 ECB 模式padding: CryptoJS.pad.Pkcs7, // 使用 PKCS7 填充iv: iv // 使用偏移量});// 将加密后的数据转换成 Base64const base64Cipher = encrypted.ciphertext.toString(CryptoJS.enc.Base64);// 处理 Android 某些低版本的 BUG// 替换某些特殊字符,因为加密后的 Base64 字符串在某些设备上会有问题const resultCipher = base64Cipher.replace(/\+/g, "-").replace(/\//g, "_");// 返回加密后的经过处理的 Base64return resultCipher;
}
解密函数

我们还需要一个函数来解密信息。这个函数接收加密后的文字,然后返回正常的明文。

// AES解密函数
export function decrypt(encryptData: string): string {try {// 先将 Base64 还原一下,因为加密的时候做了一些字符的替换const restoreBase64 = encryptData.replace(/\-/g, "+").replace(/_/g, "/");// 解密const decryptedContent = CryptoJS.AES.decrypt(restoreBase64, key, {mode: CryptoJS.mode.ECB, // 使用 ECB 模式padding: CryptoJS.pad.Pkcs7, // 使用 PKCS7 填充iv: iv // 使用偏移量});// 将解密对象转换成 UTF8 的字符串const resultDecipher = CryptoJS.enc.Utf8.stringify(decryptedContent);// 返回解密结果return resultDecipher;} catch (error) {// 如果解密失败,返回空字符串return ""; }
}

如何在 Vue.js 项目中使用

假设我们有了上面的加密和解密函数,现在要在 Vue.js 项目中使用它们。

创建一个 Vue 组件

我们创建一个简单的 Vue 组件,让用户输入一些信息,然后可以加密和解密。

<template><div><input type="text" v-model="plaintext" placeholder="请输入明文" /><button @click="encryptText">加密</button><button @click="decryptText">解密</button><p>加密后的文本: {{ ciphertext }}</p><p>解密后的文本: {{ decryptedText }}</p></div>
</template><script setup>
import { ref } from 'vue';
import { encrypt, decrypt } from './crypto'; // 导入我们写的加密和解密函数// 定义响应式状态
const plaintext = ref('');
const ciphertext = ref('');
const decryptedText = ref('');// 加密文本
function encryptText() {ciphertext.value = encrypt(plaintext.value);
}// 解密文本
function decryptText() {decryptedText.value = decrypt(ciphertext.value);
}
</script>
http://www.lryc.cn/news/458537.html

相关文章:

  • Feign的使用
  • 前端反接保护:实用方案解析与探讨
  • 【C++】第五节:内存管理
  • 【Java SE】方法 和 递归 的应用
  • JVS低代码轻应用是什么?是如何拼装的?这篇文章讲的非常详细
  • K210(openMV)与STM32 通信教程
  • 【HarmonyOS】HMRouter使用详解(三)生命周期
  • Docker 教程三 (Ubuntu Docker安装)
  • Redis:持久化
  • 精准监控,高效运营 —— 商品信息实时分析为商家带来新机遇
  • Nginx应用配置实战
  • html实现倒计时
  • HTMLCSS练习
  • LeetCode讲解篇之377. 组合总和 Ⅳ
  • Midjourney中文版:创意无限,艺术之旅由此启程
  • 安装R和RStudio:开始你的数据分析之旅
  • 如何使用python连接数据库?
  • 停车位识别数据集 图片数量12416张YOLO,xml和txt标签都有; 2类类别:space-empty,space-occupied;
  • MySQL 创建子账号
  • 代码随想录 106. 岛屿的周长
  • 阿里云融合认证中的App端一键登录能力
  • 基于YOLO11/v10/v8/v5深度学习的安检X光危险品检测与识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
  • vue-插槽作用域实用场景
  • Prometheus+Grafana 监控 K8S Ingress-Ningx Controller
  • 如何在Visual Studio 2019中创建.Net Core WPF工程
  • 自然语言处理(NLP)论文数量的十年趋势:2014-2024
  • .net core API中使用LiteDB
  • YOLO_V8分割
  • 根据请求错误的状态码判断代理配置问题
  • Python 网络爬虫高阶用法