Vue项目中实现AES加密解密

打印 上一主题 下一主题

主题 551|帖子 551|积分 1653

在前端开辟中,掩护用户数据的安全性至关重要。AES(高级加密尺度)作为一种广泛利用的对称加密算法,因其高效性和安全性而受到青睐。本文将介绍怎样在Vue项目中实现AES加密解密,包括ECB和CBC两种模式。
环境搭建

在Vue项目中利用AES加密解密功能之前,须要先安装crypto-js库。通过执行以下下令,可以轻松地将crypto-js添加到项目中:
  1. npm install crypto-js --save-dev
复制代码
封装AES加密解密方法

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

ECB(电子暗码本模式)是一种简单的加密方式,将数据分成固定长度的块举行加密。以下是ECB模式的加密和解密方法:
  1. import CryptoJS from 'crypto-js';
  2. /**
  3. * AES加密处理(ECB模式)
  4. */
  5. export function encryptECB(plaintText) {
  6.     var plaintText = plaintText;
  7.     var options = {
  8.         mode: CryptoJS.mode.ECB,
  9.         padding: CryptoJS.pad.Pkcs7
  10.     };
  11.     var key = CryptoJS.enc.Utf8.parse("abcdefgabcdefg12"); //秘钥
  12.     var encryptedData = CryptoJS.AES.encrypt(plaintText, key, options);
  13.     var encryptedBase64Str = encryptedData.toString().replace(/\//g, "_");
  14.     encryptedBase64Str = encryptedBase64Str.replace(/\+/g,"-");
  15.     return encryptedBase64Str;
  16. }
  17. /**
  18. * AES解密处理(ECB模式)
  19. */
  20. export function decryptECB(encryptedBase64Str) {
  21.     var vals = encryptedBase64Str.replace(/\-/g, '+').replace(/_/g, '/');
  22.     var options = {
  23.         mode: CryptoJS.mode.ECB,
  24.         padding: CryptoJS.pad.Pkcs7
  25.     };
  26.     var key = CryptoJS.enc.Utf8.parse("abcdefgabcdefg12"); //秘钥
  27.     var decryptedData = CryptoJS.AES.decrypt(vals, key, options);
  28.     var decryptedStr = CryptoJS.enc.Utf8.stringify(decryptedData);
  29.     return decryptedStr
  30. }
复制代码
CBC模式

CBC(暗码块链接模式)通过利用前一个块的加密结果来影响当前块的加密过程,从而进步安全性。以下是CBC模式的加密和解密方法:
  1. import CryptoJS from 'crypto-js'
  2. /**
  3. * AES加密处理(CBC模式)
  4. */
  5. export function encryptCBC(word, keyStr, ivStr) {
  6.     keyStr = keyStr ? keyStr : "abcdefgabcdefg12";
  7.     ivStr = ivStr ? ivStr : "!@#$%asdfg12345";
  8.     let key = CryptoJS.enc.Utf8.parse(keyStr);
  9.     let iv = CryptoJS.enc.Utf8.parse(ivStr);
  10.     let srcs = CryptoJS.enc.Utf8.parse(word);
  11.     let encrypted = CryptoJS.AES.encrypt(srcs, key, {
  12.         iv,
  13.         mode: CryptoJS.mode.CBC,
  14.         padding: CryptoJS.pad.ZeroPadding
  15.     })
  16.     return encrypted.toString()
  17. }
  18. /**
  19. * AES解密处理(CBC模式)
  20. */
  21. export function decryptCBC(word, keyStr, ivStr) {
  22.     word = (word + '').replace(/\n*$/g, '').replace(/\n/g, ''); //增加这一行,将换行符替换为空
  23.     keyStr = keyStr ? keyStr : "abcdefgabcdefg12";
  24.     ivStr = ivStr ? ivStr : "!@#$%asdfg12345";
  25.     var key = CryptoJS.enc.Utf8.parse(keyStr);
  26.     let iv = CryptoJS.enc.Utf8.parse(ivStr);
  27.     var decrypt = CryptoJS.AES.decrypt(word, key, {
  28.         iv,
  29.         mode: CryptoJS.mode.CBC,
  30.         padding: CryptoJS.pad.ZeroPadding
  31.     })
  32.     return decrypt.toString(CryptoJS.enc.Utf8)
  33. }
复制代码
利用方法

在Vue组件中,您可以导入并利用这些方法来加密和解密数据。例如:
  1. import { encryptECB, decryptECB, encryptCBC, decryptCBC } from "@/util/aes";
  2. // 使用CBC模式加密WebSocket URL
  3. const encrypted = encryptCBC("ws://192.168.30.110:15674/ws");
  4. console.log(encrypted); // 输出加密后的数据:O6hoY/k1QZ+0eYMSciwxTZUceXKdQ9EWXkdSIECwf9c=
  5. const decrypted = decryptCBC(encrypted);
  6. console.log(decrypted); // 输出解密后的数据:ws://192.168.30.110:15674/ws
复制代码
安全性考虑



  • 密钥和初始化向量(IV)应该安全地存储和管理,避免硬编码在代码中。
  • CBC模式相较于ECB模式提供了更高的安全性,因此在大概的环境下保举利用CBC模式。
  • 选择合适的分组巨细和添补方式,以平衡性能和安全性。
通过本文的介绍,您应该可以大概明确并实现Vue项目中的AES加密解密功能,希望这些信息对您的项目有所资助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表