Exemple #1
0
        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();
        }
Exemple #2
0
 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();
     }
 }