Win10/11内置工具无法解压minizip-asm生成的加密Zip文件求助
解决Windows内置解压工具无法打开minizip-asm生成的加密Zip文件问题
问题原因
Windows 10/11内置的Zip解压工具仅支持传统ZipCrypto加密算法,而minizip-asm库默认使用AES系列加密(AES-128/AES-256),这种加密方式不被Windows内置工具兼容,因此会抛出0x80004005:未指定错误。第三方工具如7-Zip支持多种加密算法,所以能正常解压生成的Zip文件。
修复方案
在调用mz.append方法时,显式指定加密算法为ZipCrypto,对应minizip-asm的参数encrypt: 0(参数取值:0=ZipCrypto,1=AES-128,2=AES-256)。
修改后的代码
function gfn_exportExcel(dataJson, fn, pw) { var data = dataJson.data; var wch = dataJson.wch; // step 1.making workbook var wb = XLSX.utils.book_new(); // step 2. making excel sheet var newWorksheet = XLSX.utils.aoa_to_sheet(data); // step 2-2. setting columns newWorksheet["!cols"] = gfn_fitToColumnExcel(data, wch); // step 3. naming workbook XLSX.utils.book_append_sheet(wb, newWorksheet, "data"); // step 4. making excel file var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'}); // step 5. export excelfile or export files as zip file if( pw ){ var mz = new Minizip(); // 显式指定加密算法为ZipCrypto,兼容Windows内置解压工具 mz.append('data.xlsx', gfn_s2ab(wbout), {password : pw, encrypt: 0}); saveAs(new Blob([mz.zip()],{type:"application/octet-stream"}), fn + ".zip"); } else { saveAs(new Blob([gfn_s2ab(wbout)],{type:"application/octet-stream"}), fn + ".xlsx"); } }
额外说明
如果需要更高强度的加密且不介意用户使用第三方工具解压,可以保留默认的AES加密;若必须兼容Windows内置工具,则只能选择ZipCrypto(注意:ZipCrypto的加密强度较低,安全性不如AES)。
内容的提问来源于stack exchange,提问作者Joon Lim
相关产品推荐
相关产品推荐

