joken-前端工程师

  博客园 :: 首页 :: 新随笔 :: :: :: 管理 ::

crypto-js 支持指定 AES 加密算法的变种。AES 有多种加密模式,例如 ECBCBCCFBOFB 等。默认情况下,crypto-js 使用 AES 算法的 CBC 模式,并且需要提供一个初始向量(IV)。如果需要更改加密模式或设置不同的选项,可以通过 CryptoJS.AES.encryptCryptoJS.AES.decrypt 函数来实现。

示例:指定 AES 加密模式

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

// 密钥和数据
const secretKey = 'my-secret-key';
const iv = CryptoJS.enc.Utf8.parse('1234567890123456'); // 16 字节 IV
const data = 'Hello, this is a secret message!';

// 使用 AES-CBC 加密(指定模式和 IV)
const encryptedData = CryptoJS.AES.encrypt(data, secretKey, { iv: iv }).toString();

console.log('Encrypted Data:', encryptedData);

// 解密
const bytes = CryptoJS.AES.decrypt(encryptedData, secretKey, { iv: iv });
const decryptedData = bytes.toString(CryptoJS.enc.Utf8);

console.log('Decrypted Data:', decryptedData);

说明:

  • iv: iviv(初始向量)是 AES 加密所必需的,尤其是当使用 CBC 模式时。它通常是一个 16 字节的字符串。
  • 默认模式是 CBC,但是你可以指定其他模式,如 ECBCFB 等。

指定其他 AES 模式

你可以通过更改 options 对象中的 mode 来使用其他模式。例如,使用 ECB 模式:

const encryptedData = CryptoJS.AES.encrypt(data, secretKey, {
  mode: CryptoJS.mode.ECB
}).toString();

console.log('Encrypted Data (ECB):', encryptedData);

// 解密
const bytes = CryptoJS.AES.decrypt(encryptedData, secretKey, {
  mode: CryptoJS.mode.ECB
});
const decryptedData = bytes.toString(CryptoJS.enc.Utf8);

console.log('Decrypted Data (ECB):', decryptedData);

常用的 AES 模式

  • CryptoJS.mode.CBC:默认的模式,使用 IV(初始向量)。
  • CryptoJS.mode.ECB:电子密码本模式,不需要 IV,但不太安全,建议谨慎使用。
  • CryptoJS.mode.CFB:加密反馈模式。
  • CryptoJS.mode.OFB:输出反馈模式。

选择适当的加密模式

  • CBC(Cipher Block Chaining):最常用的 AES 模式,通常用于加密较长的数据。它需要 IV(初始化向量),并且每个数据块的加密依赖于前一个数据块。
  • ECB(Electronic Codebook):每个数据块独立加密,不需要 IV,但容易受到模式分析攻击,因此不推荐在安全要求较高的场合使用。
  • CFB 和 OFB:这些模式在某些场景下使用,适用于流加密,但通常不如 CBC 安全。

根据你的应用需求选择加密模式及其配置。

posted on 2025-01-07 21:57  joken1310  阅读(2951)  评论(0)    收藏  举报