Tổng quan

Bảo mật dữ liệu là điều tối quan trọng trong bối cảnh kỹ thuật số ngày nay và một cách hiệu quả để bảo vệ thông tin nhạy cảm là mã hóa. Phần tổng quan này sẽ hướng dẫn bạn cách mã hóa hoặc giải mã toàn bộ kho lưu trữ hoặc các mục cụ thể trong đó, đảm bảo tính bảo mật và toàn vẹn cho dữ liệu của bạn. Aspose.ZIP tạo điều kiện thuận lợi cho một loạt hoạt động liên quan đến mã hóa và giải mã các kho lưu trữ.

Cách mã hóa hoặc giải mã toàn bộ kho lưu trữ ZIP

Mã hóa kho lưu trữ Zip bằng phương pháp truyền thống

Có hai phương pháp mã hóa có sẵn cho kho lưu trữ ZIP: truyền thống, được coi là yếu hiện nay và AES hiện đại. Tiêu chuẩn ZIP cho phép mọi mục nhập được mã hóa bằng một trong hai phương pháp này ngay cả trong cùng một kho lưu trữ. Mã hóa AES cung cấp khả năng bảo mật mạnh mẽ hơn và có sẵn ở các độ dài khóa khác nhau (128 bit, 192 bit và 256 bit). Nó cung cấp sự bảo vệ tốt hơn cho dữ liệu nhạy cảm trong kho lưu trữ ZIP.

Tệp được nén bằng Deflate

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new TraditionalEncryptionSettings("p@s$")));
            archive.CreateEntry("alice29.txt", source);
            archive.Save(zipFile);
        }
    }

Mã hóa toàn bộ kho lưu trữ bằng phương pháp AES

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
            {
                archive.CreateEntry("alice29.txt", source);
                archive.Save(zipFile);
            }
        }
    }

Các mẫu này cho biết cách nhúng EncryptionSetting phiên bản trong Archive constructor . Điều này cho phép mã hóa có chọn lọc các mục riêng lẻ, giữ cho các mục khác không bị mã hóa.

Mã hóa mục nhập thứ hai trong ba mục trong Zip Archive

    using (FileStream zipFile = File.Open(this.resultFile, FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new Archive())
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256)));
            archive.CreateEntry("fields.c", source3);
            archive.Save(zipFile);
        }
    }

Mặc dù điều này có vẻ khác thường nhưng thực sự khả thi khi mã hóa các mục cụ thể trong kho lưu trữ ZIP bằng các phương pháp mã hóa và mật khẩu khác nhau. Cách tiếp cận này cho phép thực hiện chiến lược bảo mật chi tiết và tùy chỉnh hơn, trong đó các tệp hoặc nhóm tệp riêng lẻ có thể có các mức độ bảo vệ riêng biệt. Tuy nhiên, điều quan trọng cần lưu ý là phương pháp này có thể làm phức tạp quá trình quản lý và giải mã cũng như khả năng tương thích với các công cụ lưu trữ ZIP khác nhau có thể khác nhau.

Mã hóa Zip bằng các phương pháp và mật khẩu khác nhau

    using (FileStream zipFile = File.Open(this.resultFile, FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new Archive())
        {
            archive.CreateEntry("alice29.txt", source1, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$1", EncryptionMethod.AES256)));
            archive.CreateEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$2")));
            archive.CreateEntry("fields.c", source3, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$3", EncryptionMethod.AES256)));
            archive.Save(zipFile);
        }
    }

Aspose.ZIP cho phép bạn thêm mã hóa vào kho lưu trữ hiện có mà không cần đóng gói lại toàn bộ nội dung. Tuy nhiên, điều quan trọng cần lưu ý là tất cả các mục của kho lưu trữ phải không được bảo vệ; nếu không, một ngoại lệ sẽ được nêu ra.

Mã hóa kho lưu trữ ZIP hiện có

    using (var archive = new Archive("plain.zip"))
    {
        archive.Save("encrypted.zip", new ArchiveSaveOptions() 
        { 
            EncryptionOptions = new AesEcryptionSettings("p@s$", EncryptionMethod.AES256)
        });
    }

Giải mã kho lưu trữ Zip

Người dùng có tùy chọn giải mã một mục cụ thể trong kho lưu trữ ZIP được mã hóa hoặc toàn bộ kho lưu trữ.

Giải mã mục nhập cụ thể

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new TraditionalEncryptionSettings("p@s$")));
            archive.CreateEntry("alice29.txt", source);
            archive.Save(zipFile);
        }
    }

Giải mã toàn bộ kho lưu trữ Zip

Trong trường hợp này, chúng tôi cần cung cấp mật khẩu trong hàm tạo.

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
            {
                archive.CreateEntry("alice29.txt", source);
                archive.Save(zipFile);
            }
        }
    }

Cách mã hóa hoặc giải mã kho lưu trữ RAR

Giải mã kho lưu trữ RAR

Aspose.ZIP không hỗ trợ thành phần lưu trữ RAR, nó chỉ hỗ trợ giải nén. RAR archive có thể được mã hóa có hoặc không có bảo vệ tên tệp.
Trong trường hợp trước, người dùng cần cung cấp mật khẩu giải mã trong RarArchiveLoadOptions ngay từ khi bắt đầu tạo phiên bản lưu trữ RAR. Trong trường hợp sau, có thể chuyển mật khẩu sau khi trích xuất mục nhập.

Giải mã toàn bộ kho lưu trữ RAR bằng tên tệp được mã hóa

    using (RarArchive archive = new RarArchive("source.rar", 
    new RarArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
    {
        archive.ExtractToDirectory("destination");
    }

Giải mã mục nhập cụ thể từ kho lưu trữ RAR

Mẫu này sẽ hoạt động nếu chỉ nội dung của các mục được mã hóa còn tên tệp thì không.

    using (RarArchive archive = new RarArchive("source.rar"))
    {
        archive.Entries[0].Extract("first_entry.bin", "p@s$");
    }

Giải mã mục nhập cụ thể từ kho lưu trữ RAR dưới dạng luồng

Tuy nhiên, trong mẫu này , giả định là chỉ nội dung của các mục được mã hóa chứ không phải tên tệp . Điều này đòi hỏi phải sao chép byte đầu vào vào luồng bộ nhớ.

    MemoryStream destination = new MemoryStream();
    using (RarArchive archive = new RarArchive("source.rar"))
    {
        using (var source = archive.Entries[1].Open("p@s$"))
        {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
            {
                destination.Write(buffer, 0, bytesRead);
            }
        }
    }

Cách mã hóa hoặc giải mã toàn bộ kho lưu trữ 7ZIP

Phương pháp mã hóa tệp lưu trữ 7z

Tùy chọn duy nhất của mã hóa kho lưu trữ 7z là AES .

Mã hóa và nén với toàn bộ kho lưu trữ 7z của LZMA2

Kho lưu trữ 7Z hỗ trợ khả năng mã hóa từng mục nhập bằng mật khẩu riêng hoặc không được bảo vệ.

    using (FileStream szFile = File.Open("archive.7z", FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");	
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("p@s$"))))
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2);
            archive.CreateEntry("fields.c", source3);
            archive.Save(szFile);
        }
    }

Mã hóa các mục của kho lưu trữ 7z bằng mật khẩu riêng và để lại một mục không được mã hóa

Tương tự như ZIP, người dùng có thể giải mã toàn bộ kho lưu trữ hoặc mục nhập cụ thể từ nó.
Kho lưu trữ 7Z có thể được mã hóa có hoặc không có bảo vệ tên tệp. Nếu tên tệp được mã hóa, bạn cần cung cấp mật khẩu khi khởi tạo kho lưu trữ .

    using (FileStream szFile = File.Open("archive.7z", FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new SevenZipArchive())
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("p@s$")));
            archive.CreateEntry("fields.c", source3, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("$ecret")));
            archive.Save(szFile);
        }
    }

Giải mã toàn bộ kho lưu trữ với tên tệp được mã hóa vào thư mục

Cho dù tên tệp có được mã hóa hay không thì việc cung cấp mật khẩu trong hàm tạo giải nén là an toàn.
Mẫu dưới đây sẽ chỉ hoạt động khi chỉ có nội dung được bảo vệ.

    using (SevenZipArchive archive = new SevenZipArchive("archive.7z", "p@s$")) 
    { 
        archive.ExtractToDirectory("C:\\extracted");
    }

Giải mã mục nhập cụ thể

    using (SevenZipArchive archive = new SevenZipArchive("archive.7z"))
    {
        archive.Entries[0].Extract("data.bin", "p@s$");
    }

Các tính năng Aspose.ZIP được hỗ trợ khác cho .NET API

Sử dụng thư viện Aspose.ZIP C# để chuyển đổi, hợp nhất, chỉnh sửa tài liệu tệp zip, trích xuất dữ liệu từ kho lưu trữ và hơn thế nữa!

  

Support and Learning Resources

  
  

Aspose.Zip offers individual archive processing APIs for other popular development environments, listed below: