Vue项目中实现AES加密解密的全过程

 更新时间:2024年08月19日 10:42:16   作者:小金子J  
AES算法是一种对称加密算法,用于加密和解密数据,下面这篇文章主要给大家介绍了关于Vue项目中实现AES加密解密的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在前端开发中,保护用户数据的安全性至关重要。AES(高级加密标准)作为一种广泛使用的对称加密算法,因其高效性和安全性而受到青睐。本文将介绍如何在Vue项目中实现AES加密解密,包括ECB和CBC两种模式。

项目中用到AES算法做传输加密的优点。

1、对内存的需求非常低,适合于受限环境。

2、运算速度快。

3、分组长度和密钥长度设计灵活。

4、很好的抵抗差分密码分析及线性密码分析的能力。

5、AES的密钥长度比DES大,它也可设定为32比特的任意倍数,最小值为128比特,最大值为256比特,所以用穷举法是不可能破解的。

环境搭建

在Vue项目中使用AES加密解密功能之前,需要先安装crypto-js库。通过执行以下命令,可以轻松地将crypto-js添加到项目中:

npm install crypto-js --save-dev

封装AES加密解密方法

接下来,我们将在Vue项目的util目录下创建一个名为aes.js的文件,用于封装AES加密解密的方法。

ECB模式

ECB(电子密码本模式)是一种简单的加密方式,将数据分成固定长度的块进行加密。以下是ECB模式的加密和解密方法:

import CryptoJS from 'crypto-js';

/**
 * AES加密处理(ECB模式)
 */
export function encryptECB(plaintText) {
    var plaintText = plaintText;
    var options = {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    };
    var key = CryptoJS.enc.Utf8.parse("abcdefgabcdefg12"); //秘钥
    var encryptedData = CryptoJS.AES.encrypt(plaintText, key, options);
    var encryptedBase64Str = encryptedData.toString().replace(/\//g, "_");
    encryptedBase64Str = encryptedBase64Str.replace(/\+/g,"-");
    return encryptedBase64Str;
}
/**
 * AES解密处理(ECB模式)
 */
export function decryptECB(encryptedBase64Str) {
    var vals = encryptedBase64Str.replace(/\-/g, '+').replace(/_/g, '/');
    var options = {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    };
    var key = CryptoJS.enc.Utf8.parse("abcdefgabcdefg12"); //秘钥
    var decryptedData = CryptoJS.AES.decrypt(vals, key, options);
    var decryptedStr = CryptoJS.enc.Utf8.stringify(decryptedData);
    return decryptedStr
}

CBC模式

CBC(密码块链接模式)通过使用前一个块的加密结果来影响当前块的加密过程,从而提高安全性。以下是CBC模式的加密和解密方法:

import CryptoJS from 'crypto-js'

/**
 * AES加密处理(CBC模式)
 */
export function encryptCBC(word, keyStr, ivStr) {
    keyStr = keyStr ? keyStr : "abcdefgabcdefg12";
    ivStr = ivStr ? ivStr : "!@#$%asdfg12345";
    let key = CryptoJS.enc.Utf8.parse(keyStr);
    let iv = CryptoJS.enc.Utf8.parse(ivStr);
    let srcs = CryptoJS.enc.Utf8.parse(word);
    let encrypted = CryptoJS.AES.encrypt(srcs, key, {
        iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    })
    return encrypted.toString()
}
/**
 * AES解密处理(CBC模式)
 */
 export function decryptCBC(word, keyStr, ivStr) {
    word = (word + '').replace(/\n*$/g, '').replace(/\n/g, ''); //增加这一行,将换行符替换为空
    keyStr = keyStr ? keyStr : "abcdefgabcdefg12";
    ivStr = ivStr ? ivStr : "!@#$%asdfg12345";
    var key = CryptoJS.enc.Utf8.parse(keyStr);
    let iv = CryptoJS.enc.Utf8.parse(ivStr);
    var decrypt = CryptoJS.AES.decrypt(word, key, {
        iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    })
    return decrypt.toString(CryptoJS.enc.Utf8)
}

使用方法

在Vue组件中,您可以导入并使用这些方法来加密和解密数据。例如:

import { encryptECB, decryptECB, encryptCBC, decryptCBC } from "@/util/aes";

// 使用CBC模式加密WebSocket URL
const encrypted = encryptCBC("ws://192.168.30.110:15674/ws");
console.log(encrypted); // 输出加密后的数据:O6hoY/k1QZ+0eYMSciwxTZUceXKdQ9EWXkdSIECwf9c=

const decrypted = decryptCBC(encrypted);
console.log(decrypted); // 输出解密后的数据:ws://192.168.30.110:15674/ws

安全性考虑

  • 密钥和初始化向量(IV)应该安全地存储和管理,避免硬编码在代码中。
  • CBC模式相较于ECB模式提供了更高的安全性,因此在可能的情况下推荐使用CBC模式。
  • 选择合适的分组大小和填充方式,以平衡性能和安全性。

到此这篇关于Vue项目中实现AES加密解密的文章就介绍到这了,更多相关Vue实现AES加密解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vuex 中插件的编写案例解析

    vuex 中插件的编写案例解析

    Vuex 的 store 接受 plugins 选项,这个选项暴露出每次 mutation 的钩子。Vuex 插件就是一个函数,这篇文章主要介绍了vuex 中插件的编写案例,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • vue导航栏部分的动态渲染实例

    vue导航栏部分的动态渲染实例

    今天小编就为大家分享一篇vue导航栏部分的动态渲染实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 浅谈vue的生命周期

    浅谈vue的生命周期

    这篇文章主要为大家介绍了vue的生命周期,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • vue3网络请求添加loading过程

    vue3网络请求添加loading过程

    这篇文章主要介绍了vue3网络请求添加loading过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Vue中@click.stop和@click.prevent实例详解

    Vue中@click.stop和@click.prevent实例详解

    当我们使用Vue.js开发前端应用时,经常会在模版中使用@click指令来响应用户的点击事件,这篇文章主要给大家介绍了关于Vue中@click.stop和@click.prevent的相关资料,需要的朋友可以参考下
    2024-04-04
  • vue中使用router全局守卫实现页面拦截的示例

    vue中使用router全局守卫实现页面拦截的示例

    这篇文章主要介绍了vue中使用router全局守卫实现页面拦截的示例,帮助大家维护自己的项目,感兴趣的朋友可以了解下
    2020-10-10
  • VUE中template的三种写法

    VUE中template的三种写法

    这篇文章介绍了VUE中template的三种写法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Vue学习笔记进阶篇之vue-cli安装及介绍

    Vue学习笔记进阶篇之vue-cli安装及介绍

    这篇文章主要介绍了Vue学习笔记进阶篇之vue-cli安装及介绍,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • vue中改变了vuex数据视图不更新,也监听不到的原因及解决

    vue中改变了vuex数据视图不更新,也监听不到的原因及解决

    这篇文章主要介绍了vue中改变了vuex数据视图不更新,也监听不到的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Vue3中正确使用ElementPlus的示例代码

    Vue3中正确使用ElementPlus的示例代码

    这篇文章主要介绍了Vue3中正确使用ElementPlus的示例代码,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01

最新评论