为什么要加密?
现在的互联网世界充满了各种各样的信息,有些信息非常重要,比如密码、个人信息等。如果我们把这些信息直接发送到服务器,别人可能会截取到,然后偷走我们的信息。为了避免这种情况发生,我们需要把重要的信息变成别人看不懂的东西,这就是加密的作用。
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加密内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
            
                                            
                                            
                                            
                                            
                                            
                                            
发表评论