AES 公钥加密 & Base64转码 加密解密

发布时间 2023-11-29 16:01:19作者: yoona-lin
import CryptoJS from 'crypto-js';

function toString(words) {
    return CryptoJS.enc.Utf8.stringify(words);
}

function toBase64String(words) {
    return CryptoJS.enc.Base64.stringify(words);
}

/** AES 公钥加密 & Base64转码 */
export function aesEncrypt(input, key) {
    const secretKey = CryptoJS.enc.Utf8.parse(key); // 16位
    const iv = CryptoJS.enc.Utf8.parse(key);
    const body = CryptoJS.AES.encrypt(input, secretKey, {
        iv,
        padding: CryptoJS.pad.Pkcs7,
        mode: CryptoJS.mode.ECB // 指定加密模式为 ECB
    });
    // encode in base64
    return toBase64String(body.ciphertext);
}



以下是对应的解密函数,用于解密使用 AES 公钥加密并进行 Base64 编码的数据:

```javascript
import CryptoJS from 'crypto-js';

/** AES 公钥解密 & Base64解码 */
export function aesDecrypt(input, key) {
  const secretKey = CryptoJS.enc.Utf8.parse(key); // 16位
  const iv = CryptoJS.enc.Utf8.parse(key);

  // decode from base64
  const ciphertext = fromBase64String(input);

  const decrypted = CryptoJS.AES.decrypt(
    {
      ciphertext: ciphertext
    },
    secretKey,
    {
      iv: iv,
      padding: CryptoJS.pad.Pkcs7,
      mode: CryptoJS.mode.ECB
    }
  );

  return decrypted.toString(CryptoJS.enc.Utf8);
}

解密函数 aesDecrypt 需要传入两个参数:加密后的输入数据和密钥 key。函数内部先将密钥解析为 CryptoJS 可识别的格式。然后,使用 fromBase64String 函数将输入数据进行 Base64 解码。接下来,使用 CryptoJS.AES.decrypt 方法解密数据,其中传入了解密所需的参数,包括密文、密钥、初始向量(使用同样的密钥)以及填充和加密模式。最后,使用 toString 方法将解密后的结果从 CryptoJS.enc.Utf8 格式转换为可读文本。

请确保在使用解密函数时正确引入 CryptoJS 库,并根据需要传入加密后的数据和密钥进行解密操作。