Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AES 128解密:CryptoJS.enc.Latin1的第一个字符格式不正确_Javascript_Encryption_Cryptography_Aes_Cryptojs - Fatal编程技术网

Javascript AES 128解密:CryptoJS.enc.Latin1的第一个字符格式不正确

Javascript AES 128解密:CryptoJS.enc.Latin1的第一个字符格式不正确,javascript,encryption,cryptography,aes,cryptojs,Javascript,Encryption,Cryptography,Aes,Cryptojs,我有一个已编码的字符串,需要对其进行解密。我使用了Crypto JS,经过一定的研究,我可以得出以下解决方案 data=“+jdtb5boloxabhqltw6nplnv9lzix1owhr3hf3hirtu2pdg/TLkrTw6Xu4JpKFlxE+zgOZavj0UynSZ+ojxmDXRbUlfyOc4YAncJVMXr28/atfxzknqohbpio7wxcdne2k+dhzfcnozynkynvl4ezecs8vo7vc6vc6vc5zflp5spsgye+TBbauPX+/+w

我有一个已编码的字符串,需要对其进行解密。我使用了Crypto JS,经过一定的研究,我可以得出以下解决方案

data=“+jdtb5boloxabhqltw6nplnv9lzix1owhr3hf3hirtu2pdg/TLkrTw6Xu4JpKFlxE+zgOZavj0UynSZ+ojxmDXRbUlfyOc4YAncJVMXr28/atfxzknqohbpio7wxcdne2k+dhzfcnozynkynvl4ezecs8vo7vc6vc6vc5zflp5spsgye+TBbauPX+/+wxawxwxwwwwwwwwwwwwwwwwwjjjjjvmn7v6hughn7v6www7wwwkf7f7f7f9v6w9wjjjjjjj9v9v9w9w9w9wx;
key=“062ec23950a55b9f8b21b0f9d45ca853”;
//解码base64数据,这样我们就可以分离iv和crypt文本。
var rawData=atob(数据);
var iv=原始数据子串(0,32);
var crypttext=rawData.substring(32);
//解密。。。
var plaintextArray=CryptoJS.AES.decrypt(
{ciphertext:CryptoJS.enc.Latin1.parse(cryptotext)},
CryptoJS.enc.Hex.parse(密钥),
{iv:CryptoJS.enc.Latin1.parse(iv)}
);
var test=CryptoJS.enc.Latin1.stringify(明文数组);
console.log(test.toString())

使用-CryptoJS.lib.WordArray.random(128/8)生成iv

data=“+jdtb5boloxabhqltw6nph2kfaa1mul2veuoqhmteozjutlfh1qrdn+oe8y1lgofnqtuelb1nowbq9dz2g6ncd2vpad4okiyarxnz+ykhvacqw+FTThjTWadMD/KvpzZ7SlxBh7HpCbZ/kmmxsoonuk2p8pvev3pkjmugxv36c/iN9C+arhpt95xzff5isaq+/9kk4wzwzw6i8y8y8y8y8y8c2c2q/kkkjjjjjx56vx56vx6v2yyyyy1f1fn=”;
key=“062ec23950a55b9f8b21b0f9d45ca853”;
//解码base64数据,这样我们就可以分离iv和crypt文本。
var rawData=atob(数据);
var iv=CryptoJS.lib.WordArray.random(128/8);
var crypttext=rawData;
//解密。。。
var plaintextArray=CryptoJS.AES.decrypt(
{ 
密文:CryptoJS.enc.Latin1.parse(cryptotext)
},
CryptoJS.enc.Hex.parse(密钥),
{ 
iv:CryptoJS.enc.Latin1.parse(iv),
模式:CryptoJS.mode.CBC,
填充:CryptoJS.pad.Pkcs7
}
);
var decrypted=CryptoJS.enc.Latin1.stringify(明文数组);
console.log(解密)

用随机IV而不是原始IV解密可能不是一个明智的主意。。。将在2^128个案例中的~1个案例中有效;)为什么你会随机生成一个IV,然后用它来解密…?不要在解密中生成随机IV-你使用加密时生成的IV。我最好的猜测是:IV是错误的。。。如果不传入CryptoJS.enc.Latin1.parse(iv),但。。。仅仅是iv?这正是我尝试的,但无法工作。看起来当你得到它时,iv已经是垃圾。这是错误iv的典型症状。实际上,你假设大部分加密数据都是iv,使你开始在错误的块上解密,这使你解密的第一个块看起来损坏了。。见答案