public void ProtectedTempZip() { FileInfo tmpFile = TempFile.CreateTempFile("protectedXlsx", ".zip"); FileInfo tikaProt = XSSFTestDataSamples.GetSampleFile("protected_passtika.xlsx"); FileInputStream fis = new FileInputStream(tikaProt.Open(FileMode.Open)); POIFSFileSystem poifs = new POIFSFileSystem(fis); EncryptionInfo ei = new EncryptionInfo(poifs); Decryptor dec = ei.Decryptor; bool passOk = dec.VerifyPassword("tika"); Assert.IsTrue(passOk); // generate session key SecureRandom sr = new SecureRandom(); byte[] ivBytes = new byte[16], keyBytes = new byte[16]; sr.NextBytes(ivBytes); sr.NextBytes(keyBytes); // extract encrypted ooxml file and write to custom encrypted zip file InputStream is1 = dec.GetDataStream(poifs); CopyToFile(is1, tmpFile, CipherAlgorithm.aes128, keyBytes, ivBytes); is1.Close(); // provide ZipEntrySource to poi which decrypts on the fly ZipEntrySource source = fileToSource(tmpFile, CipherAlgorithm.aes128, keyBytes, ivBytes); // test the source OPCPackage opc = OPCPackage.Open(source); String expected = "This is an Encrypted Excel spreadsheet."; //XSSFEventBasedExcelExtractor extractor = new XSSFEventBasedExcelExtractor(opc); //extractor.IncludeSheetNames = (/*setter*/false); //String txt = extractor.Text; //Assert.AreEqual(expected, txt.Trim()); //XSSFWorkbook wb = new XSSFWorkbook(opc); //txt = wb.GetSheetAt(0).GetRow(0).GetCell(0).StringCellValue; //Assert.AreEqual(expected, txt); //extractor.Close(); //wb.Close(); opc.Close(); source.Close(); poifs.Close(); fis.Close(); tmpFile.Delete(); throw new NotImplementedException(); }
private void InjectData(ZipEntrySource zipEntrySource, Stream outStream) { try { ZipOutputStream zos = new ZipOutputStream(outStream); try { var en = zipEntrySource.Entries; while (en.MoveNext()) { var ze = (ZipEntry)en.Current; zos.PutNextEntry(new ZipEntry(ze.Name)); var inputStream = zipEntrySource.GetInputStream(ze); XSSFSheet xSheet = GetSheetFromZipEntryName(ze.Name); if (xSheet != null) { SXSSFSheet sxSheet = GetSXSSFSheet(xSheet); var xis = sxSheet.getWorksheetXMLInputStream(); try { CopyStreamAndInjectWorksheet(inputStream, zos, xis); } finally { xis.Close(); } } else { CopyStream(inputStream, zos); } inputStream.Close(); } } finally { zos.Close(); } } finally { zipEntrySource.Close(); } }