How to secure zip file with password using c# and SharpZipLib

1k views Asked by At

I have to prepare zip file and secure it with password. I'm using C# and SharpZipLib library. I have to return the created file using WebApi. The code below does not work - I can open file without providing password. What do I do wrong?

        [HttpGet]
        [Route("zip")]
        public async Task ZipFile()
        {
            Response.StatusCode = 200;
            Response.Headers.Add("ContentDisposition", $"attachment; filename=\"{Path.GetFileName("z.zip")}\"");
            Response.Headers.Add("ContentType", "application/octet-stream");
            compressDirectory("C:\\temp\\files");
        }

        
        private void compressDirectory(string DirectoryPath, int CompressionLevel = 9)
        {
            string[] filenames = Directory.GetFiles(DirectoryPath);
            using (ZipOutputStream OutputStream = new ZipOutputStream(Response.Body))
            {
                OutputStream.SetLevel(CompressionLevel);
                
                byte[] buffer = new byte[4096];

                for (int i=0; i<filenames.Length; i++)
                {

                    ZipEntry entry = new ZipEntry($"{i}\\" +Path.GetFileName(filenames[i]));
                    entry.DateTime = DateTime.Now;
                    OutputStream.PutNextEntry(entry);

                    using (FileStream fs = System.IO.File.OpenRead(filenames[i]))
                    {
                        int sourceBytes;

                        do
                        {
                            sourceBytes = fs.Read(buffer, 0, buffer.Length);
                            OutputStream.Write(buffer, 0, sourceBytes);
                        } while (sourceBytes > 0);
                    }
                }

                OutputStream.Password = "123";
                OutputStream.Finish();
                OutputStream.Close();
            }

        }
0

There are 0 answers