Vue3 如何使用CryptoJS加密

 更新时间:2024年10月16日 11:41:05   作者:茶颜悅色  
CryptoJS是一个强大的JavaScript库,它提供了多种加密解密功能,尤其是AES加密方法,使用CryptoJS,我们可以有效地保护数据安全,防止信息泄露,通过简单的安装和函数编写,本文给大家介绍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 // 使用偏移量
  });
  // 将加密后的数据转换成 Base64
  const base64Cipher = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
  // 处理 Android 某些低版本的 BUG
  // 替换某些特殊字符,因为加密后的 Base64 字符串在某些设备上会有问题
  const resultCipher = base64Cipher.replace(/\+/g, "-").replace(/\//g, "_");
  // 返回加密后的经过处理的 Base64
  return 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>

到此这篇关于Vue3 使用CryptoJS加密的文章就介绍到这了,更多相关Vue3 CryptoJS加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vitepress的文档渲染基础教程

    Vitepress的文档渲染基础教程

    这篇文章主要为大家介绍了Vitepress的文档渲染基础教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • uniapp和vue组件之间的传值(父子传值,兄弟传值,跨级传值,vuex)

    uniapp和vue组件之间的传值(父子传值,兄弟传值,跨级传值,vuex)

    这篇文章主要介绍了uniapp和vue组件之间的传值(父子传值,兄弟传值,跨级传值,vuex),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • vue遍历对象中的数组取值示例

    vue遍历对象中的数组取值示例

    今天小编就为大家分享一篇vue遍历对象中的数组取值示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue打包后生成一个配置文件可以修改IP

    vue打包后生成一个配置文件可以修改IP

    本文主要介绍了修改Vue项目运行的IP和端口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • vite动态导入页面动态import组件实现方式

    vite动态导入页面动态import组件实现方式

    本文总结了在使用Vite进行动态导入页面和组件时遇到的问题,由于Vite与Webpack在处理动态import方面有所不同,需要采用特殊方法,文章强调了从后台获取路由表并动态引入组件的实践方法
    2026-04-04
  • vue单文件组件的实现

    vue单文件组件的实现

    最近翻阅了一下vue。发觉有一个单文件组件之前基本忽视掉了。所以本文就详细的介绍了vue单文件组件的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • vue脚手架安装以及安装失败问题解决办法

    vue脚手架安装以及安装失败问题解决办法

    我们通常会用到脚手架vuecli创建项目,此时需要安装脚手架,下面这篇文章主要给大家介绍了关于vue脚手架安装以及安装失败问题的解决办法,需要的朋友可以参考下
    2022-07-07
  • Vue3 JSX解释器的实现

    Vue3 JSX解释器的实现

    本文主要介绍了Vue3 JSX解释器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 如何解决vue项目打包后文件过大问题

    如何解决vue项目打包后文件过大问题

    这篇文章主要介绍了如何解决vue项目打包后文件过大问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 如何利用vscode-icons-js在Vue3项目中实现文件图标展示

    如何利用vscode-icons-js在Vue3项目中实现文件图标展示

    在开发文件管理系统或类似的项目时,我们常常需要根据文件类型展示对应的文件图标,这样可以提高用户体验,本文将介绍如何在Vue3项目中利用vscode-icons-js库,实现类似VSCode的文件图标展示效果,感兴趣的朋友一起看看吧
    2024-08-08

最新评论