在我的Android应用程序的webview中,我正在尝试使用Crypto-JS进行加密和解密。加密工作正常,但解密不起作用。我搜索了很多,没有找到适用于我的解决方案。我是javascript的新手。在我的另一个应用程序中,我在Android中正在做这个并且工作正常。但是使用jquery解密是行不通的。以下是我正在使用的加密功能:
function encryptText(textvalue, key) {
var key = CryptoJS.enc.Utf8.parse(key);
var iv = CryptoJS.lib.WordArray.random(128/8);
var encrypted = CryptoJS.AES.encrypt(textvalue, key,
{
keySize: 128 / 8,
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var pass = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
var ivpass = encrypted.iv.toString(CryptoJS.enc.Base64);
return ivpass+pass;
}
工作正常。 以下是我正在使用的解密功能:
function decryptText(encrypted, keyParam){
var key = CryptoJS.enc.Utf8.parse(keyParam);
var indexOfSeperation = encrypted.indexOf("==");
var iv = encrypted.substring(0, indexOfSeperation+2);
var value = encrypted.substring(indexOfSeperation + 2);
console.log("iv: "+iv);
console.log("value: "+value);
var valueStr = CryptoJS.enc.Base64.parse(value);
var ivStr = CryptoJS.enc.Base64.parse(iv);
var decrypted = CryptoJS.AES.decrypt(valueStr, key,
{
iv: ivStr,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
var result = CryptoJS.enc.Utf8.parse(decrypted);
console.log("result: "+result);
}
结果总是空的。有什么我做错了。
答案 0 :(得分:2)
CryptoJS decrypt()
函数要求密文要么是OpenSSL格式的,要么是speciel对象。
您需要在特殊对象上设置的唯一值是ciphertext
属性:
var decrypted = CryptoJS.AES.decrypt({
ciphertext: valueStr
},
key,
{
iv: ivStr,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
此外,decrypted
是一个WordArray。您需要使用stringify()
从中获取字符串:
var result = CryptoJS.enc.Utf8.stringify(decrypted);