AES 算法(Rijndael 算法)在加解密时需要提供密钥(Key
)和初始向量(IV
),而用、 CryptoJS.AES 库在加解密时只需要提供密码(Secret Passphrase
):
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
CryptoJS.AES 库加解密的实质依旧是 AES 加解密,区别在于 CryptoJS.AES 库需要先将密码转换成密钥和初始向量。这个过程可以参考 OpenSSL 的 EVP_BytesToKey 函数。
这里简单说明加密字符串的结构,加密字符串是 base64 编码,其所对应的字节数组由三部分组成:
Salted__
这八个字符对应的 ASCII 编码,占 8 个字节- 加密时用到的随机种子,占 8 个字节
- 用 AES 算法(Rijndael 算法,CBC 模式,256 位密钥,128 位块)加密得到的字节数组
其他语言同功能实现传送门