Tổng quan
Aspose.ZIP tạo điều kiện cho một loạt các hoạt động mã hóa và giải mã cho các kho lưu trữ. Sử dụng API Aspose.Zip cho Python.NET, bạn có thể mã hóa và giải mã các kho lưu trữ ZIP, RAR và 7-Zip một cách hiệu quả.Mã hóa tập tin ZIP
Hai kỹ thuật mã hóa có thể được sử dụng cho các kho lưu trữ ZIP: phương pháp truyền thống cũ hơn, hiện được coi là kém an toàn hơn và mã hóa AES hiện đại mạnh mẽ hơn. Tiêu chuẩn ZIP cho phép mã hóa các mục riêng lẻ trong cùng một kho lưu trữ bằng một trong hai phương pháp. Mã hóa AES, nổi tiếng với khả năng bảo mật mạnh mẽ hơn, hỗ trợ nhiều độ dài khóa khác nhau, bao gồm 128 bit, 192 bit và 256 bit, mang đến khả năng bảo vệ nâng cao cho dữ liệu nhạy cảm trong kho lưu trữ ZIP. Mỗi mục trong cùng một kho lưu trữ có thể được mã hóa bằng mã hóa riêng, do đó bạn có thể kết hợp các loại mã hóa khác nhau trong cùng một kho lưu trữ.
Mở khóa ZIP bằng phương pháp Deflate
with open("archive.zip", 'x') as zip_file:
with open("alice29.txt") as source:
method = zp.saving.CompressionSettings.deflate
encryption = zp.saving.TraditionalEncryptionSettings("p@s$S")
archive = zp.Archive(zp.saving.ArchiveEntrySettings(method, encryption))
archive.create_entry("alice29.txt", source)
archive.save(zip_file)
Mã tạo một tệp ZIP mới có tên archive.zip, nén nội dung của alice29.txt bằng phương pháp nén Deflate, mã hóa nó bằng phương thức mã hóa ZIP truyền thống bằng mật khẩu "p@s$S" và lưu tệp đã nén và mã hóa. tập tin vào kho lưu trữ ZIP mới được tạo.
Mã hóa ZIP bằng AES
with open("archive.zip", 'x') as zip_file:
with open("alice29.txt") as source:
method = zp.saving.CompressionSettings.deflate
encryption = zp.saving.AesEcryptionSettings("p@s$S", zp.saving.EncryptionMethod.AES256)
archive = zp.Archive(zp.saving.ArchiveEntrySettings(method, encryption))
archive.create_entry("alice29.txt", source)
archive.save(zip_file)
Mã được cung cấp minh họa cách tạo kho lưu trữ ZIP có tên archive.zip, nén tệp alice29.txt bằng phương pháp nén Deflate và mã hóa tệp bằng mã hóa AES-256 bằng mật khẩu "p@s$S". Đối với những mẫu này, chúng tôi đã cung cấp các phiên bản của [EncryptionSetting](
https://reference.aspose.com/zip/net/aspose.zip
. Saving/encryptionsettings/) trong
Archive constructor
tương ứng. Có thể áp dụng mã hóa cho mục nhập cụ thể mà không bảo vệ mục khác.
Điều này cho thấy tính linh hoạt của việc áp dụng mã hóa cho các mục cụ thể trong kho lưu trữ ZIP, cho phép các tệp khác nhau có mức độ bảo vệ riêng biệt. 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 mục nhập thứ hai trong số ba
with open("archive.zip", 'x') as zip_file:
encrypted_entry = zp.saving.ArchiveEntrySettings(None, zp.saving.AesEcryptionSettings("p@s$", zp.saving.EncryptionMethod.AES256))
with zp.Archive as archive:
archive.create_entry("alice29.txt", "alice29.txt")
archive.create_entry("asyoulik.txt", "asyoulik.txt", false, encrypted_entry)
archive.create_entry("fields.c", "fields.c")
archive.save(zip_file)
Mã này minh họa việc tạo kho lưu trữ ZIP được bảo vệ bằng mật khẩu bằng Python. Nó thêm ba tệp: alice29.txt, asyoulik.txt và field.c.
Đây là cách hoạt động:
Mở hoặc tạo một tệp cho kho lưu trữ ZIP dựa trên tên được lưu trữ trong this.resultFile. Tạo các đối tượng FileInfo để thể hiện các tập tin được thêm vào. Tạo một đối tượng lưu trữ mới.
Thêm tệp:** alice29.txt và field.c được thêm vào kho lưu trữ mà không cần bất kỳ cài đặt đặc biệt nào. asyoulik.txt được thêm bằng mã hóa AES-256, yêu cầu mật khẩu p@s$ để giải mã. Lưu kho lưu trữ đã hoàn thành vào tệp được chỉ định.
Mã hóa ZIP bằng các phương pháp và mật khẩu khác nhau
with open("archive.zip", 'x') as zip_file:
encrypted_1 = zp.saving.ArchiveEntrySettings(None, zp.saving.AesEcryptionSettings("p@s$1", zp.saving.EncryptionMethod.AES256))
encrypted_2 = zp.saving.ArchiveEntrySettings(None, zp.saving.TraditionalEncryptionSettings("p@s$2"))
encrypted_3 = zp.saving.ArchiveEntrySettings(None, zp.saving.AesEcryptionSettings("p@s$3", zp.saving.EncryptionMethod.AES128))
with zp.Archive as archive:
archive.create_entry("alice29.txt", "alice29.txt", false, encrypted_1)
archive.create_entry ("asyoulik.txt", "asyoulik.txt", false, encrypted_2)
archive.create_entry("fields.c", "fields.c", false, encrypted_3)
archive.save(zip_file)
Đoạn mã này minh họa việc tạo một kho lưu trữ ZIP bằng Python, nơi các tệp riêng lẻ được mã hóa bằng các phương thức và mật khẩu khác nhau. Sau đây là cách hoạt động của nó:
Thiết lập tệp: Mở hoặc tạo một tệp cho kho lưu trữ ZIP dựa trên tên được lưu trữ trong this.resultFile. Tạo các đối tượng FileInfo đại diện cho các tệp sẽ được thêm vào: alice29.txt, asyoulik.txt và field.c.
Tạo Kho lưu trữ: Tạo một đối tượng lưu trữ mới (kho lưu trữ).
Thêm tệp được mã hóa: Mã sử dụng vòng lặp để duyệt qua các tệp và thêm chúng vào kho lưu trữ với cài đặt mã hóa cụ thể:
– alice29.txt
- Tệp này được thêm bằng ** Mã hóa AES-256** và yêu cầu mật khẩu "p@s" để giải mã.
– asyoulik.txt
- Tệp này được thêm bằng một phương thức mã hóa khác có tên Mã hóa truyền thống. Nó cũng sử dụng một mật khẩu riêng, "p@s", để giải mã.
– fields.c
- Tệp này được thêm lại bằng mã hóa AES-128, nhưng với mật khẩu khác, "p@s$3", để giải mã.
Lưu bản lưu trữ: Cuối cùng, mã sẽ lưu bản lưu trữ hoàn chỉnh có chứa các tệp được mã hóa vào tệp được chỉ định.
Mã hóa kho lưu trữ ZIP bằng các phương pháp và mật khẩu khác nhau
with zp.Archive("plain.zip") as archive:
save_options = zp.saving.ArchiveSaveOptions()
save_options.encryption_options = zp.saving.AesEcryptionSettings("p@s$", zp.saving.EncryptionMethod.AES256)
archive.save("encrypted.zip", save_options)
Mã này lấy một kho lưu trữ ZIP hiện có plain.zip, mã hóa nội dung của nó bằng AES-256 với mật khẩu p@s$ và lưu phiên bản được mã hóa dưới dạng một kho lưu trữ mới có tên encrypted.zip.
Giải mã tập tin ZIP
Giải mã tệp ZIP bằng mật khẩu
with zp.Archive("source.zip") as archive:
archive.entries[0].extract("first_entry.bin", "p@s$")
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. Đoạn mã này trình bày cách tiếp cận cơ bản để giải mã mục nhập đầu tiên từ kho lưu trữ ZIP được bảo vệ bằng mật khẩu. Nếu mật khẩu đúng thì kho lưu trữ sẽ mở thành công.
Giải mã toàn bộ tệp ZIP
load_options = zp.ArchiveLoadOptions()
load_options.decryption_password = "p@s$S"
with zp.Archive("source.zip", load_options) as archive:
archive.extract_to_directory("destination")
Mã đơn giản này lấy kho lưu trữ ZIP được bảo vệ bằng mật khẩu "source.zip", sử dụng mật khẩu được cung cấp "p@s$S" để giải mã và trích xuất tất cả nội dung của nó vào một "đích" thư mục được chỉ định.
Giải mã tập tin RAR
Aspose.ZIP không hỗ trợ thành phần lưu trữ RAR, nó chỉ hỗ trợ giải nén. Kho lưu trữ RAR 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
load_options = zp.rar.RarArchiveLoadOptions()
load_options.decryption_password = "p@s$S"
with zp.rar.RarArchive("source.rar", load_options) as archive:
archive.extract_to_directory("destination")
Về cơ bản, mã này hoạt động tương tự như ví dụ ZIP nhưng hoạt động riêng cho các kho lưu trữ RAR. Nó lấy một kho lưu trữ RAR được bảo vệ bằng mật khẩu "source.rar", sử dụng mật khẩu được cung cấp "p@s$S" để giải mã và trích xuất tất cả nội dung của nó vào một "đích" thư mục được chỉ định.
Giải mã mục nhập cụ thể từ kho lưu trữ RAR
with zp.rar.RarArchive("source.rar") as archive:
archive.entries[0].extract("first_entry.bin", "p@s$S")
Mã này mở kho lưu trữ RAR source.rar, giải mã và trích xuất mục nhập đầu tiên của kho lưu trữ bằng mật khẩu "p@s$S" và lưu nó vào tệp first_entry.bin. 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.
Giải mã mục nhập cụ thể từ kho lưu trữ RAR dưới dạng luồng
with io.FileIO("file.bin", "xb") as destination:
with zp.rar.RarArchive("source.rar") as archive:
with archive.entries[0].open("p@s$S") as source:
destination.write(source.readall())
Mã này mở kho lưu trữ RAR source.rar, giải mã bản ghi thứ hai của kho lưu trữ bằng mật khẩu "p@s$S" và đọc nội dung của nó vào ByteArrayOutputStream. Bằng cách sử dụng bộ đệm đọc, mã đảm bảo truyền dữ liệu dần dần, giúp xử lý các tệp lớn một cách hiệu quả. 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. Trong ví dụ này, các byte mục nhập mẫu đang được sao chép vào luồng bộ nhớ.
Mã hóa 7zip với aes 256
Tùy chọn duy nhất của mã hóa kho lưu trữ 7z là AES . Kho lưu trữ sử dụng tính năng nén LZMA2 để giảm kích thước tệp hiệu quả và mã hóa AES bằng mật khẩu để tăng cường bảo mật. Mã lặp qua các tệp và thêm chúng vào kho lưu trữ bằng phương thức CreateEntry.
Mã hóa và nén toàn bộ kho lưu trữ 7zip
with open("archive.7z", 'xb') as sz_file:
compression = zp.saving.SevenZipLZMA2CompressionSettings()
encryption = zp.saving.SevenZipAESEncryptionSettings("p@s$S")
entry_settings = zp.saving.SevenZipEntrySettings(compression, encryption)
with zp.sevenzip.SevenZipArchive(entry_settings) as archive:
archive.create_entry("alice29.txt", "alice29.txt")
archive.create_entry("asyoulik.txt", "asyoulik.txt")
archive.create_entry("fields.c", "fields.c")
archive.save(sz_file)
Mã này tạo một kho lưu trữ 7z được mã hóa chứa ba tệp: alice29.txt, asyoulik.txt và field.c. Kho lưu trữ sử dụng tính năng nén LZMA2 và mã hóa AES với mật khẩu "p@s$S". Các tệp được thêm vào kho lưu trữ bằng phương thức CreateEntry và bản thân kho lưu trữ được lưu vào tệp archive.7z đã tạo.
7z Mã hóa bằng mật khẩu
with open("archive.7z", 'xb') as sz_file:
compression = zp.saving.SevenZipLZMA2CompressionSettings()
entry_pass1 = zp.saving.SevenZipEntrySettings(compression, zp.saving.SevenZipAESEncryptionSettings("p@s$S"))
entry_pass2 = zp.saving.SevenZipEntrySettings(compression, zp.saving.SevenZipAESEncryptionSettings("$ecret"))
with zp.sevenzip.SevenZipArchive(entry_settings) as archive:
archive.create_entry("alice29.txt", "alice29.txt")
archive.create_entry("asyoulik.txt", "asyoulik.txt", false, entry_pass1)
archive.create_entry("fields.c", "fields.c", false, entry_pass2)
archive.save(sz_file)
Mã này tạo một kho lưu trữ 7z được mã hóa chứa ba tệp: alice29.txt, asyoulik.txt và field.c. Tệp đầu tiên được thêm vào kho lưu trữ mà không cần cài đặt đặc biệt. Tệp thứ hai được đính kèm bằng cách nén LZMA2 và mã hóa AES với mật khẩu "p@s$S". Tệp thứ ba được đính kèm bằng cách sử dụng nén LZMA2 và mã hóa AES với mật khẩu "$ecret". Cuối cùng, kho lưu trữ được lưu vào tệp archive.7z.
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 trên
khởi tạo kho lưu trữ
.
Giải mã tập tin 7ZIP
Giải mã kho lưu trữ 7z bằng tên tệp được mã hóa
with zp.sevenzip.SevenZipArchive("archive.7z", "p@s$S") as archive:
archive.extract_to_directory("c:\extracted")
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ệ.
Giải mã mục nhập cụ thể 7zip
with zp.sevenzip.SevenZipArchive("archive.7z") as archive:
archive.entries[0].extract("data.bin", "p@s$S")
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ệ.
Aspose.ZIP được hỗ trợ khác cho các tính năng API Python.Net
Với thư viện Aspose.ZIP trong Python.Net, bạn có thể xử lý liền mạch các tác vụ khác nhau liên quan đến tài liệu tệp ZIP. Cho dù bạn cần chuyển đổi định dạng, hợp nhất tệp, chỉnh sửa nội dung hay trích xuất dữ liệu, Aspose.ZIP đều cung cấp chức năng toàn diện để hợp lý hóa quy trình làm việc của bạn và nâng cao năng suất.
Support and Learning Resources
- Tài nguyên học tập
- Tài liệu
- Mã nguồn
- Tài liệu tham khảo API
- Hỗ trợ sản phẩm
- Hỗ trợ miễn phí
- Hỗ trợ trả phí
- Blog
- Ghi chú phát hành
- Tại sao Aspose.Zip lại dành cho Python.Net?
- Danh sách khách hàng
- Câu chuyện thành công