最近在开发中遇到了一个问题,就是使用AES解密后的JSON无法解析。在AES加密前,数据可以顺利被解析处理。但经过AES解密后,得到的JSON却无法被解析,返回的数据为空。
encryptedData = 'byp5knjFrRGVvLF8Do0gDA==' sessionKey = '7bkJucXusy+p9CtX2D/asA==' iv = 'V0tkRU9sSFA2TW50WmVadjA==' // 使用 CryptoJS 库进行解密 var key = CryptoJS.enc.Base64.parse(sessionKey); var iv = CryptoJS.enc.Base64.parse(iv); var decrypted = CryptoJS.AES.decrypt(encryptedData,key,{ iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7 }); console.log(decrypted.toString(CryptoJS.enc.Utf8))
通过console.log可以看出,解密后得到的是UTF-8编码的字符串,也就是我们需要的JSON。但是尝试使用JSON.parse()或者使用jQuery的$.parseJSON()对解密后的JSON进行解析,均返回空值。
最后的解决方法是在解密后对得到的字符串进行一次JSON.stringify()的操作。原因是因为解密后得到的是一个字符串,而JSON.parse()要求的参数是个JSON字符串类型,而非普通字符串类型。
var decryptedString = decrypted.toString(CryptoJS.enc.Utf8) console.log('解密后的字符串:' + decryptedString) var jsonObject = JSON.parse(JSON.stringify(decryptedString)) console.log('解析后为:' + jsonObject)
使用JSON.stringify()方法把解密后的字符串转化为JSON字符串类型,再使用JSON.parse()方法来解析即可。
总结:AES解密后的JSON无法解析,是因为解密后得到的是字符串而不是JSON字符串类型。解决方法是把解密后的字符串使用JSON.stringify()转化为JSON字符串类型,再使用JSON.parse()方法来解析。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。