crypto-js 中的默认 AES 配置是什么?

what is the default AES config in crypto-js?

https://cryptojs.gitbook.io/docs/ 刚刚说“CryptoJS 支持 AES-128、AES-192 和 AES-256。它会根据您传入的密钥的大小来选择变体。如果您使用密码短语,那么它将生成一个 256 位密钥。"

但是 modepaddingiv 等默认配置是什么?我注意到模式和填充有一个 CipherOption

interface CipherHelper {
    encrypt(message: WordArray | string, key: WordArray | string, cfg?: CipherOption): CipherParams;
    decrypt(ciphertext: CipherParams | string, key: WordArray | string, cfg?: CipherOption): WordArray;
}

但我不知道默认值是多少,例如默认情况下它看起来不像 ECB 模式。

我的第二个问题是它如何根据我输入的密钥决定使用ace-128、aes-192、ase-256,例如如果我使用像“我的密码”这样的短字符串密钥,它会决定使用 ace-128 吗?怎么样?

---更新---

除了答案,我发现 cryptojs: How to generate AES passphrase 也有助于理解 CryptoJS 中使用的密码。

您对 CryptoJs-docs (https://cryptojs.gitbook.io/docs/) 的 link 揭示了您问题的答案,但我们确实有两种情况。

  1. 您正在为加密函数提供密码或 2) 您正在提供一个显式密钥作为输入。

场景 1:您将 password/passphrase 如“myPassword”提供给函数:

CryptoJS.AES.encrypt("Message", "Secret Passphrase");

现在 CryptoJs 派生 一个 32 字节长的 AES-256 加密密钥 一个 16 字节长的初始化向量 (iv) 来自密码,使用此密钥加密“消息”,iv 在 AES 模式 CBC 和(默认)填充 Pkcs7.

场景 2:你给函数输入一个键:

var key = CryptoJS.enc.Hex.parse("000102030405060708090a0b0c0d0e0f");
​var iv = CryptoJS.enc.Hex.parse("101112131415161718191a1b1c1d1e1f");
​var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });

现在 CryptoJs 根据密钥长度(16/24/32 字节) 使用 AES-128/192/256 的密钥来自密码的 16 字节长初始化向量 (iv),使用此密钥加密“消息”,iv 在 AES 模式 CBC 和(默认)填充 Pkcs7.

更多选项:您可以使用其他模式或填充时使用像这样的选项(key + iv 从密码导出,AES 模式 CFB 和填充 AnsiX923):

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase", {
  mode: CryptoJS.mode.CFB,
  padding: CryptoJS.pad.AnsiX923
});