我已经使用n
加密了一系列CryptoJS
字符串元素:[krypt1, krypt2, krypt3, ...]
每个元素的keydecrypt
都相同。
我尝试解密数组的每个元素并返回一个字符串解密元素数组,如[dekrypt1, dekrypt2, dekrypt3, ...]
我的代码是:
var urltodecrypt = this.url.chunk;
function decrypteach(x) {
return CryptoJS.AES.decrypt(x.toString(), keydecrypt).toString(CryptoJS.enc.Utf8);
}
var clearfileurl = urltodecrypt.map(decrypteach);
当数组中有1个元素时,一切都很好:它返回一个正确解密的字符串元素数组。
当有> 1个元素时,var urltodecrypt
仍会提供正确的数组(已验证),但var clearfileurl
会返回错误:Error: Malformed UTF-8 data
我错过了什么?
修改
尝试@vector建议this model上的loop over each element function
:
var urltodecrypt = this.url.chunk;
var arrayLength = urltodecrypt.length;
for (var i = 0; i < arrayLength; i++) {
var clearfileurl = CryptoJS.AES.decrypt(urltodecrypt.toString(), keydecrypt).toString(CryptoJS.enc.Utf8);
}
console.log (clearfileurl);
完全相同的结果= 1个元素数组:ok /&gt; 1个元素数组:Error: Malformed UTF-8 data
编辑#2:问题关闭
我刚把我的第一个代码(map
)分成了不同的代码:
x.toString()
CryptoJS.AES.decrypt()
toString(CryptoJS.enc.Utf8)
我重新启动了我的服务器:现在一切都很好,从1个元素数组到+10个元素数组。
以防万一,低于我的(重度和迷信......)测试的工作代码:
var urltodecrypt = this.url.chunk;
console.log (urltodecrypt);
function decrypteach(x) {
var stringurl = x.toString();
var bytesfileurl = CryptoJS.AES.decrypt(stringurl, keydecrypt);
var finaldecrypturl = bytesfileurl.toString(CryptoJS.enc.Utf8);
return finaldecrypturl;
}
var clearfileurl = urltodecrypt.map(decrypteach);
console.log (clearfileurl);