Javascript cryptojs解密失败
我有这个javascript。当我试图解密时,它没有给出任何输出。 加密工作正常,但无法解密 我做错了什么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
<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”)代码>
打字问题是离题的,对未来的读者没有帮助。您可以删除您的问题,或者等到问题关闭后再自动删除