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

Qiu*_*ang 1 javascript encryption aes cryptojs

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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

- - 更新 - -

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

Mic*_*ehr 10

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

\n
    \n
  1. 您正在向加密函数提供密码,或者 2)您提供显式密钥作为输入。
  2. \n
\n

场景 1:您向函数提供一个密码/密码短语(如“myPassword”):

\n
CryptoJS.AES.encrypt("Message", "Secret Passphrase");\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

场景 2:您向该函数提供一个键:

\n
var key = CryptoJS.enc.Hex.parse("000102030405060708090a0b0c0d0e0f");\n\xe2\x80\x8bvar iv = CryptoJS.enc.Hex.parse("101112131415161718191a1b1c1d1e1f");\n\xe2\x80\x8bvar encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

更多选项:在使用如下选项时,您可以使用其他模式或填充(从密码短语派生密钥 + iv、AES 模式 CFB 和填充 AnsiX923):

\n
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase", {\n  mode: CryptoJS.mode.CFB,\n  padding: CryptoJS.pad.AnsiX923\n});\n
Run Code Online (Sandbox Code Playgroud)\n