vue3中使用AES实现加密解密(ECB&&CBC)


前言

什么是AES:

  • AES 是一种对称加密标准,用于保护电子数据。它是一种在全球范围内广泛使用的加密算法,被认为是目前最安全的对称加密算法之一。
  • AES提供了几种不同的密钥长度选项(128 比特、192 比特和 256 比特),其中 128 比特的密钥长度是最常用的。
  • AES 的主要特点包括高度的安全性、高效性能和易于实现。它在保护敏感数据、加密通信以及在安全协议中广泛应用。在使用 AES进行加密时,重要的是选择合适的模式(如 ECBCBC)和正确管理密钥以及初始化向量(IV),以确保安全性和数据完整性。

提示:以下是本篇文章正文内容,下面案例可供参考

一、ECB和CBC的区别

ECB(电子密码本模式)

  1. 块处理方式:
    ECB 模式将整个明文分割成固定大小的块(比如 128 位),然后每个块都独立加密。这意味着相同的明文块将总是被加密为相同的密文块,不考虑其它块的影响。
  2. 并行处理:
    由于块之间没有依赖关系,ECB 模式可以很容易地并行处理多个块,适合硬件加速和多线程环境。
  3. 缺点:
    主要的缺点是安全性较差,特别是对于长时间重复的纯文本,会产生明显的模式,容易受到密码分析的攻击。

CBC(密码块链模式)

  1. 块处理方式:
    CBC 模式需要一个初始化向量(IV),首先将 IV 异或(XOR)到第一个明文块,然后将结果加密。接下来,将上一步的密文块与当前明文块异或,再进行加密,依此类推。
  2. 数据依赖:
    CBC 模式中,每个密文块的加密依赖于前一个密文块的内容,因此每个块的加密结果会影响后续块的加密结果。这种依赖性增加了安全性,因为即使相同的明文块在不同位置被加密,其密文块也会不同。
  3. 适用性:
    CBC 模式在保证安全性的同时,较为适合传输较短的消息,但是需要注意处理最后一个块的填充问题。

二、使用步骤

1.引入crypto-js 库

代码如下(示例):npm install crypto-js --save-dev

ECB模式:

ECB模式:
import CryptoJS from "crypto-js";

export default {
  // 加密
  const encrypt = (word, keyStr) => {
    keyStr = keyStr ? keyStr : "默认密钥";
    let key = CryptoJS.enc.Utf8.parse(keyStr);
    let srcs = CryptoJS.enc.Utf8.parse(word);
    let encrypted = CryptoJS.AES.encrypt(srcs, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
  },
  // 解密
  const  decrypt = (word, keyStr) => {
    keyStr = keyStr ? keyStr : "默认密钥";
    var key = CryptoJS.enc.Utf8.parse(keyStr);
    var decrypt = CryptoJS.AES.decrypt(word, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Utf8.stringify(decrypt).toString();
  }
};

CBC模式:

CBC模式:
import CryptoJS from "crypto-js";

export default {
  // 加密
 const encrypt = (word, keyStr, ivStr) => {
    keyStr = keyStr ? keyStr : "默认密钥";
    ivStr = ivStr ? ivStr : "默认偏移量";
    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();
  },
  // 解密
  const decrypt = (word, keyStr, ivStr) => {
    keyStr = keyStr ? keyStr : "默认密钥";
    ivStr = ivStr ? ivStr : "默认偏移量";
    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);
  }
};

//使用方法
const decrypted = decrypt(data, "密钥", "偏移量");

总结

如果此文章对您有帮助 ,请点赞关注一下,祝您生活愉快

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值