vue CryptoJS Aes 加密 解密

文章目录

引入


CryptoJS 是一个流行的 JavaScript 库,用于加密和解密数据。以下是如何使用 CryptoJS 来解密 AES 加密的数据:

首先,确保你已经在项目中包含了 CryptoJS 库。你可以通过 npm 安装它:

npm install crypto-js

然后,在你的 JavaScript 文件中引入它:

const CryptoJS = require("crypto-js");

或者,如果你直接在 HTML 中使用,可以通过 CDN 引入:

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>

加密

接下来,你可以使用以下代码来解密 AES 加密的数据:

  • 加密模式
    • AES 解密模式:CFB 模式
    • 填充方式:nopadding
    • 输入格式:string
    • 输出格式:base64
const CryptoJS = require("crypto-js");  
  
function encryptAES(plaintext, secretKey, iv) {  
    const secretKeyHex = CryptoJS.enc.Utf8.parse(secretKey); // 将密钥转换为 WordArray  
    const ivHex = CryptoJS.enc.Utf8.parse(iv); // 将 IV 转换为 WordArray  
    const plaintextWordArray = CryptoJS.enc.Utf8.parse(plaintext); // 将明文转换为 WordArray  
  
    const encrypted = CryptoJS.AES.encrypt(plaintextWordArray, secretKeyHex, {  
        iv: ivHex,  
        mode: CryptoJS.mode.CFB,  
        padding: CryptoJS.pad.NoPadding // 使用 nopadding  
    });  
  
    const ciphertextBase64 = encrypted.toString(CryptoJS.enc.Base64); // 将加密后的 CipherParams 对象转换为 Base64 字符串  
    return ciphertextBase64;  
}  
  
// 示例用法  
const plaintext = "要加密的明文"; // 替换为实际的明文  
const secretKey = "1234567812345678"; // 密钥,16字节  
const iv = "1234567812345678"; // 初始化向量,16字节  
  
const ciphertextBase64 = encryptAES(plaintext, secretKey, iv);  
console.log(ciphertextBase64); // 输出加密后的 Base64 字符串

请注意以下几点:

  1. CryptoJS.enc.Utf8.parse 用于将明文、密钥和 IV 从 UTF-8 字符串转换为 WordArray。
  2. CryptoJS.AES.encrypt 方法用于执行 AES 加密。它接受三个参数:要加密的明文(WordArray)、密钥(WordArray)和一个配置对象。
  3. 在配置对象中,我们指定了 mode: CryptoJS.mode.CFB 来使用 CFB 模式,并且指定了 padding: CryptoJS.pad.NoPadding 来使用 nopadding 填充方式。我们还通过 iv 属性设置了 IV。
  4. 加密后的结果是一个 CipherParams 对象,我们使用 toString(CryptoJS.enc.Base64) 方法将其转换为 Base64 编码的字符串。

确保替换 plaintext 变量的值为实际的明文。同时,确保密钥和 IV 与你计划用于解密的密钥和 IV 相同。如果加密和解密过程中有任何不匹配,解密将会失败。

解密

  • 解密模式
    • AES 解密模式:CFB 模式
    • 填充方式:nopadding
    • 输入格式:base64
    • 输出格式:string
const CryptoJS = require("crypto-js");  
  
function decryptAES(ciphertextBase64, secretKey, iv) {  
    const secretKeyHex = CryptoJS.enc.Utf8.parse(secretKey); // 将密钥转换为 WordArray  
    const ivHex = CryptoJS.enc.Utf8.parse(iv); // 将 IV 转换为 WordArray  
    const ciphertext = CryptoJS.enc.Base64.parse(ciphertextBase64); // 将 Base64 编码的密文转换为 WordArray  
  
    const decrypted = CryptoJS.AES.decrypt({  
        ciphertext: ciphertext  
    }, secretKeyHex, {  
        iv: ivHex,  
        mode: CryptoJS.mode.CFB,  
        padding: CryptoJS.pad.NoPadding // 使用 nopadding  
    });  
  
    const decryptedText = decrypted.toString(CryptoJS.enc.Utf8); // 将解密后的 WordArray 转换为 UTF-8 字符串  
    return decryptedText;  
}  

// 示例用法  
const ciphertextBase64 = "你的Base64编码的AES加密文本"; // 替换为实际的 Base64 编码的密文  
const secretKey = "1234567812345678"; // 密钥,16字节,与加密时使用的密钥相同  
const iv = "1234567812345678"; // 初始化向量,16字节,与加密时使用的IV相同  
  
const decryptedText = decryptAES(ciphertextBase64, secretKey, iv);  
console.log(decryptedText); // 输出解密后的文本

请注意以下几点:

  1. CryptoJS.enc.Utf8.parse 用于将密钥和 IV 从 UTF-8 字符串转换为 WordArray。
  2. CryptoJS.enc.Base64.parse 用于将 Base64 编码的密文转换为 WordArray。
  3. CryptoJS.AES.decrypt 方法的第二个参数是密钥的 WordArray,第三个参数是一个配置对象,其中包含模式(mode)、填充(padding)和 IV(iv)。
  4. 在配置对象中,我们指定了 mode: CryptoJS.mode.CFB 来使用 CFB 模式,并且指定了 padding: CryptoJS.pad.NoPadding 来使用 nopadding 填充方式。
  5. 最后,使用 toString(CryptoJS.enc.Utf8) 将解密后的 WordArray 转换为 UTF-8 字符串。

确保替换 ciphertextBase64 变量的值为实际的 Base64 编码的 AES 加密文本。同时,确保密钥和 IV 与加密时使用的完全相同。如果加密和解密过程中有任何不匹配,解密将会失败。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值