javascript AES加密的不一致行为

tct7dpnv  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(144)

我已经在我的项目中集成了cryptojs,我使用这个函数来加密消息

let encMsg: string = CryptoJS.AES.encrypt(message, aesKey, {iv: aesIv}).toString()

字符串
它正在工作,并在encMsg中返回base64,但它有时返回十六进制值encMsg而不是base64。我不知道为什么会发生这种情况,以及如何控制它只返回base64。
请帮帮我

fzwojiic

fzwojiic1#

CryptoJS.AES.encrypt函数应始终返回封装密文的对象。如果您直接在此对象上调用.toString()而不指定任何密码编码,则它默认为将此对象转换为字符串的CipherParams化程序;这可能不总是导致密文的Base64编码。
您可以通过在encrypt函数的结果的ciphertext属性上使用CryptoJS.enc.Base64对象的.toString()函数来强制base64输出,如下所示:

let encrypted = CryptoJS.AES.encrypt(message, aesKey, {iv: aesIv});
let encMsg = encrypted.ciphertext.toString(CryptoJS.enc.Base64);

字符串
因此,encrypted是一个CipherParams对象。它包含几个属性,包括作为WordArray对象的密文。通过使用CryptoJS.enc.Base64.toString(encrypted.ciphertext),您可以将WordArray对象转换为base64编码的字符串。
这应该总是给予你一个表示密文的base64字符串。

相关问题