Javascript cryptojs解密失败

Javascript cryptojs解密失败,javascript,encryption,cryptojs,Javascript,Encryption,Cryptojs,我有这个javascript。当我试图解密时,它没有给出任何输出。 加密工作正常,但无法解密 我做错了什么 <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script> <script language = "javascript"> var JsonFormatter = { stringify: functi

我有这个javascript。当我试图解密时,它没有给出任何输出。 加密工作正常,但无法解密 我做错了什么

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script language = "javascript">


    var JsonFormatter = {
        stringify: function (cipherParams) {
            // create json object with ciphertext
            var jsonObj = {
                ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64)
            };

            // optionally add iv and salt
            if (cipherParams.iv) {
                jsonObj.iv = cipherParams.iv.toString();
            }
            if (cipherParams.salt) {
                jsonObj.s = cipherParams.salt.toString();
            }

            // stringify json object
            return JSON.stringify(jsonObj);
        },

        parse: function (jsonStr) {
            // parse json string
            var jsonObj = JSON.parse(jsonStr);

            // extract ciphertext from json object, and create cipher params object
            var cipherParams = CryptoJS.lib.CipherParams.create({
                ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct)
            });

            // optionally extract iv and salt
            if (jsonObj.iv) {
                cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv)
            }
            if (jsonObj.s) {
                cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s)
            }

            return cipherParams;
        }
    };

    var AES = CryptoJS.AES;
    var key =  "B374A26A71490437AA024E4FADD5B497FDFF1A8EA6FF12F6FB65AF2720B59CCF";
    var iv =  CryptoJS.enc.Hex.parse('7E892875A52C59A3B588306B13C31FBD');   
    var aeskey = CryptoJS.enc.Hex.parse(key);
    var secret = "50585";

    alert("attempt 1");  
    var e1 = AES.encrypt(secret, aeskey, { iv: iv , format: JsonFormatter });
    var encJSON  = JSON.parse(e1); 
    var encresult  = encJSON['ct'];  
    var encres = encodeURIComponent(encresult);     
    alert("encrypted = " + encresult);      
    alert("e1.iv = " + e1.iv);
    alert("encoded = " + encres);   

    alert("attempt 2");
    var decoderesult = decodeURIComponent(encres);    
    var encObj = CryptoJS.lib.CipherParams.create({
        ciphertext: CryptoJS.enc.Base64.parse(decoderesult)
    }); 
    var decrypt = AES.decrypt(encObj, aeskey, { iv: iv , format: JsonFormatter });
    var decrypted = decrypted.toString(CryptoJS.enc.Utf8); 
    alert("decoded = " + decoderesult); 
    alert("decrypted = " + decrypted);      
    alert("decrypt.iv = " + decrypt.iv);


</script>

var JsonFormatter={
字符串化:函数(cipherParams){
//使用密文创建json对象
var jsonObj={
ct:cipherParams.ciphertext.toString(CryptoJS.enc.Base64)
};
//可选择添加iv和盐
if(密码参数iv){
jsonObj.iv=cipherParams.iv.toString();
}
if(密码参数盐){
jsonObj.s=cipherParams.salt.toString();
}
//字符串化json对象
返回JSON.stringify(jsonObj);
},
解析:函数(jsonStr){
//解析json字符串
var jsonObj=JSON.parse(jsonStr);
//从json对象提取密文,并创建密码参数对象
var cipherParams=CryptoJS.lib.cipherParams.create({
密文:CryptoJS.enc.Base64.parse(jsonObj.ct)
});
//选择性地提取iv和盐
if(jsonObj.iv){
cipherParams.iv=CryptoJS.enc.Hex.parse(jsonObj.iv)
}
if(jsonObj.s){
cipherParams.salt=CryptoJS.enc.Hex.parse(jsonObj.s)
}
返回密码参数;
}
};
var AES=CryptoJS.AES;
var key=“B374A26A71490437AA024E4FADD5B497FDFF1A8EA6FF12F6FB65AF2720B59CCF”;
var iv=CryptoJS.enc.Hex.parse('7E892875A52C59A3B58306B13C31FBD');
var aeskey=CryptoJS.enc.Hex.parse(key);
var secret=“50585”;
警报(“尝试1”);
var e1=AES.encrypt(secret,aeskey,{iv:iv,format:JsonFormatter});
var encJSON=JSON.parse(e1);
var encresult=encJSON['ct'];
var encres=编码元件(encresult);
警报(“加密结果”);
警报(“e1.iv=“+e1.iv”);
警报(“encoded=”+encres);
警报(“尝试2”);
var decoderesult=decodeURIComponent(encres);
var encObj=CryptoJS.lib.CipherParams.create({
密文:CryptoJS.enc.Base64.parse(解码结果)
}); 
var decrypt=AES.decrypt(encObj,aeskey,{iv:iv,格式:JsonFormatter});
var decrypted=decrypted.toString(CryptoJS.enc.Utf8);
警报(“解码=”+解码结果);
警报(“decrypted=“+decrypted”);
警报(“decrypt.iv=“+decrypt.iv”);

加密警报即将发出,但解密尚未发出。失败的原因和位置我认为您在
var decrypted=decrypted.toString(CryptoJS.enc.Utf8)一行中只有一个输入错误
应该是
var decrypted=decrypt.toString(CryptoJS.enc.Utf8)

在此之后,您将获得一个
解码结果
解密结果
。但是
decrypt.iv
仍然返回未定义的。不确定这里出了什么问题

有关演示,请参见下面和此处的

var log=函数(文本){
output.innerHTML+=''+text+'

\n'; } var JsonFormatter={ 字符串化:函数(cipherParams){ //使用密文创建json对象 var jsonObj={ ct:cipherParams.ciphertext.toString(CryptoJS.enc.Base64) }; //可选择添加iv和盐 if(密码参数iv){ jsonObj.iv=cipherParams.iv.toString(); } if(密码参数盐){ jsonObj.s=cipherParams.salt.toString(); } //字符串化json对象 返回JSON.stringify(jsonObj); }, 解析:函数(jsonStr){ //解析json字符串 var jsonObj=JSON.parse(jsonStr); //从json对象提取密文,并创建密码参数对象 var cipherParams=CryptoJS.lib.cipherParams.create({ 密文:CryptoJS.enc.Base64.parse(jsonObj.ct) }); //选择性地提取iv和盐 if(jsonObj.iv){ cipherParams.iv=CryptoJS.enc.Hex.parse(jsonObj.iv) } if(jsonObj.s){ cipherParams.salt=CryptoJS.enc.Hex.parse(jsonObj.s) } 返回密码参数; } }; var AES=CryptoJS.AES; var key=“B374A26A71490437AA024E4FADD5B497FDFF1A8EA6FF12F6FB65AF2720B59CCF”; var iv=CryptoJS.enc.Hex.parse('7E892875A52C59A3B58306B13C31FBD'); var aeskey=CryptoJS.enc.Hex.parse(key); var secret=“50585”; //警报(“尝试1”); var e1=AES.encrypt(secret,aeskey,{iv:iv,format:JsonFormatter}); var encJSON=JSON.parse(e1); var encresult=encJSON['ct']; var encres=编码元件(encresult); console.log('encres',encresult); console.log('e1.iv=',e1.iv); log('encoded=',encres); 日志('encres='+encresult); 日志('e1.iv='+e1.iv); 日志('encoded='+encres); //警报(“加密结果”); //警报(“e1.iv=“+e1.iv”); //警报(“encoded=”+encres); //警报(“尝试2”); var decoderesult=decodeURIComponent(encres); var encObj=CryptoJS.lib.CipherParams.create({ 密文:CryptoJS.enc.Base64.parse(解码结果) }); var decrypt=AES.decrypt(encObj,aeskey,{iv:iv,格式:JsonFormatter}); console.log(解密); var decrypted=decrypt.toString(CryptoJS.enc.Utf8)//解密-->解密 console.log(“decoded=“+decodesult”); console.log(“decrypted=“+decrypted”); console.log(“decrypt.iv=“+decrypt.iv”); 日志(“解码=”+解码结果); 日志(“解密=”+解密); 日志(“decrypt.iv=“+decrypt.iv”)
打字问题是离题的,对未来的读者没有帮助。您可以删除您的问题,或者等到问题关闭后再自动删除