我正在开发一个用JavaScript加密/解密文件的项目。要将加密/解密文件保存在磁盘中,我正在使用blob。所有过程都正常工作,文件被加密(并且一些测试显示我也解密了)正确。我可以使用blob方法保存大型文件(之前我使用的是URI数据,当文件大小超过1MB时,它会导致浏览器崩溃错误)。但由于某些原因,我无法正确地将解密的 blob内容保存到文件中。当它是TXT文件时,我会在文件内容的开头得到它:
data:text/plain;base64,
并继续使用base64编码的文本内容。我需要它保存为原始文件,而不是base64。当我解密exe文件时,它已损坏,所以如果我将它打开到某个文本编辑器中,我会得到:
data:application/x-msdownload;base64,
同样,看起来该文件已保存在base64中并附加了此标头。这是我创建/保存blob内容的代码(在解密例程中):
reader.onload = function(e){
var decrypted = CryptoJS.AES.decrypt(e.target.result, password)
.toString(CryptoJS.enc.Latin1);
var blob = new Blob([decrypted]);
var objectURL = window.URL.createObjectURL(blob);
if(!/^data:/.test(decrypted)){
alert("Invalid pass phrase or file! Please try again.");
return false;
}
a.attr('href','' + objectURL);
a.attr('download', file.name.replace('.encrypted',''));
step(4);
};
reader.readAsText(file);
}
如何使用原始内容保存文件?而不是header + base64编码?