Panoramica

Aspose.ZIP facilita una gamma di operazioni di cifratura e decifratura per archivi. Utilizzando l'API Aspose.Zip per Python.NET, puoi cifrare e decifrare in modo efficiente archivi ZIP, RAR e 7-Zip.

Cifrare file ZIP

Due tecniche di cifratura possono essere utilizzate per gli archivi ZIP: il metodo tradizionale più vecchio, ora considerato meno sicuro, e la più robusta cifratura moderna AES. Lo standard ZIP consente la cifratura di voci individuali all’interno dello stesso archivio utilizzando uno dei due metodi. La cifratura AES, nota per la sua maggiore sicurezza, supporta varie lunghezze di chiave, tra cui 128-bit, 192-bit e 256-bit, offrendo una protezione migliorata per i dati sensibili all’interno degli archivi ZIP. Ogni voce nello stesso archivio può essere cifrata con la propria cifratura, quindi è possibile combinare diversi tipi di cifratura nello stesso archivio.

Sbloccare ZIP con metodo 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)

Il codice crea un nuovo file ZIP chiamato archive.zip, comprime il contenuto di alice29.txt utilizzando il metodo di compressione Deflate, lo cifra con il metodo di cifratura tradizionale ZIP utilizzando la password "p@s$S", e salva il file compresso e cifrato nel nuovo archivio ZIP creato.

Cifrare ZIP con 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)

Il codice fornito dimostra come creare un archivio ZIP chiamato archive.zip, comprimere un file alice29.txt utilizzando il metodo di compressione Deflate, e cifrarlo con cifratura AES-256 utilizzando la password "p@s$S". Per questi esempi abbiamo fornito istanze di EncryptionSetting all’interno del corrispondente costruttore di Archive . È possibile applicare la cifratura per voci particolari lasciando altre non protette.
Questo mostra la flessibilità di applicare la cifratura a specifiche voci all’interno di un archivio ZIP, consentendo a file diversi di avere livelli di protezione distinti. Questo approccio consente una strategia di sicurezza più granulare e personalizzata, in cui singoli file o gruppi di file possono avere livelli di protezione distinti. Tuttavia, è importante notare che questa pratica può complicare il processo di gestione e decifratura, e la compatibilità con vari strumenti di archivio ZIP potrebbe variare.

Cifrare la seconda voce ZIP di tre

    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)

Questo codice dimostra la creazione di un archivio ZIP protetto da password in Python. Aggiunge tre file: alice29.txt, asyoulik.txt e fields.c.
Ecco come funziona:
Apre o crea un file per l’archivio ZIP basato sul nome memorizzato in this.resultFile. Crea oggetti FileInfo per rappresentare i file da aggiungere. Crea un nuovo oggetto archive.
Aggiunta di file: alice29.txt e fields.c vengono aggiunti all’archivio senza impostazioni speciali. asyoulik.txt viene aggiunto con cifratura AES-256, richiedendo la password p@s$ per la decifratura. Salva l’archivio completato nel file specificato.

Cifrare ZIP con metodi e password diversi

    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)

Questo frammento di codice dimostra la creazione di un archivio ZIP in Python dove i file individuali sono cifrati con metodi e password diversi. Ecco come funziona:
Impostazione del File: Apre o crea un file per l’archivio ZIP basato sul nome memorizzato in this.resultFile. Crea oggetti FileInfo che rappresentano i file da aggiungere: alice29.txt, asyoulik.txt e fields.c.
Creazione dell’Archivio: Crea un nuovo oggetto archive (archive).
Aggiunta di File Cifrati: Il codice utilizza un ciclo per iterare attraverso i file e aggiungerli all’archivio con specifiche impostazioni di cifratura:
alice29.txt - Questo file viene aggiunto con cifratura AES-256 e richiede la password "p@s" per la decifratura.
asyoulik.txt - Questo file viene aggiunto con un metodo di cifratura diverso chiamato Cifratura Tradizionale. Utilizza anche una password separata, "p@s", per la decifratura.
fields.c - Questo file viene aggiunto con cifratura AES-128 nuovamente, ma con una password diversa, "p@s$3", per la decifratura.
Salvataggio dell’Archivio: Infine, il codice salva l’archivio completato contenente i file cifrati nel file specificato.

Cifrare Archivio ZIP con metodi e password diversi

    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)

Questo codice prende un archivio ZIP esistente plain.zip, cifra i suoi contenuti utilizzando AES-256 con la password p@s$, e salva la versione cifrata come un nuovo archivio chiamato encrypted.zip.

Decifrare file ZIP

Decifrare File ZIP Con Password

    with zp.Archive("source.zip") as archive:
        archive.entries[0].extract("first_entry.bin", "p@s$")

L’utente ha l’opzione di decifrare una specifica voce all’interno dell’archivio ZIP cifrato. Questo frammento di codice dimostra un approccio di base per decifrare la prima voce da un archivio ZIP protetto da password. Se la password è corretta l’archivio si apre con successo.

Decifrare Intero File 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")

Questo semplice codice prende un archivio ZIP protetto da password "source.zip", utilizza la password fornita "p@s$S" per la decifratura, ed estrae tutti i suoi contenuti in una cartella designata "destination".

Decifrare file RAR

Aspose.ZIP non supporta la composizione di archivi RAR, supporta solo l’estrazione. Gli archivi RAR possono essere cifrati con o senza la protezione dei nomi dei file.
Nel primo caso l’utente deve fornire la password di decifratura all’interno delle RarArchiveLoadOptions all’inizio dell’istanziazione dell’archivio RAR. Nel secondo caso, è possibile passare la password successivamente all’estrazione della voce.

Decifrare intero archivio RAR con nomi di file cifrati

    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")

Essenzialmente, questo codice funziona in modo simile all’esempio ZIP ma specificamente per gli archivi RAR. Prende un archivio RAR protetto da password "source.rar", utilizza la password fornita "p@s$S" per la decifratura, ed estrae tutti i suoi contenuti in una cartella designata "destination".

Decifrare particolare voce dall'archivio RAR

    with zp.rar.RarArchive("source.rar") as archive:
        archive.entries[0].extract("first_entry.bin", "p@s$S")

Questo codice apre l’archivio RAR source.rar, decritta ed estrae la prima voce dell’archivio utilizzando la password "p@s$S" e la salva nel file first_entry.bin. Questo esempio funzionerà solo se il contenuto delle voci è cifrato ma i nomi dei file non lo sono.

Decifrare particolare voce dall'archivio RAR come stream

    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())

Questo codice apre l’archivio RAR source.rar, decritta la seconda voce dell’archivio utilizzando la password "p@s$S", e legge il suo contenuto in un ByteArrayOutputStream. Utilizzando un buffer di lettura, il codice assicura un trasferimento dati graduale, che aiuta a gestire file di grandi dimensioni in modo efficiente. Questo esempio funzionerà solo se il contenuto delle voci è cifrato ma i nomi dei file non lo sono. In questo esempio i byte della voce vengono copiati nello stream di memoria.

Cifratura 7zip con AES 256

L’unica opzione di cifratura per gli archivi 7z è AES . L’archivio utilizza la compressione LZMA2 per una riduzione efficiente delle dimensioni del file e la cifratura AES con la password per una maggiore sicurezza. Il codice itera attraverso i file e li aggiunge all’archivio utilizzando il metodo CreateEntry.

Cifrare e Comprimere intero archivio 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)

Questo codice crea un archivio 7z cifrato contenente tre file: alice29.txt, asyoulik.txt e fields.c. L’archivio utilizza la compressione LZMA2 e la cifratura AES con la password "p@s$S". I file vengono aggiunti all’archivio utilizzando il metodo CreateEntry, e l’archivio stesso viene salvato nel file archive.7z creato.

Cifrare 7z con Password

    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)

Questo codice crea un archivio 7z cifrato contenente tre file: alice29.txt, asyoulik.txt e fields.c. Il primo file viene aggiunto all’archivio senza impostazioni speciali. Il secondo file viene allegato utilizzando la compressione LZMA2 e la cifratura AES con la password "p@s$S". Il terzo file viene allegato utilizzando la compressione LZMA2 e la cifratura AES con la password "$ecret". Infine, l’archivio viene salvato nel file archive.7z.
Similmente agli ZIP, l’utente può decifrare l’intero archivio o una voce particolare da esso. Gli archivi 7Z possono essere cifrati con o senza la protezione dei nomi dei file. Se i nomi dei file sono cifrati, è necessario fornire la password al momento dell’istanza dell’archivio SevenZipArchive .

Decifrare file 7ZIP

Decifrare archivio 7z con nomi di file cifrati

    with zp.sevenzip.SevenZipArchive("archive.7z", "p@s$S") as archive: 
        archive.extract_to_directory("c:\extracted")

Che i nomi dei file siano cifrati o meno, è sicuro fornire la password all’interno del costruttore di estrazione. Il seguente esempio funzionerà solo quando solo il contenuto è protetto.

Decifrare particolare voce da 7zip

with zp.sevenzip.SevenZipArchive("archive.7z") as archive:
    archive.entries[0].extract("data.bin", "p@s$S")

Che i nomi dei file siano cifrati o meno, è sicuro fornire la password all’interno del costruttore di estrazione. Il seguente esempio funzionerà solo quando solo il contenuto è protetto.

Altre Funzionalità Supportate dall'API Aspose.ZIP per Python.Net

Con la libreria Aspose.ZIP in Python.Net, puoi gestire senza problemi vari compiti relativi ai documenti dei file ZIP. Che tu abbia bisogno di convertire formati, unire file, modificare contenuti o estrarre dati, Aspose.ZIP fornisce una funzionalità completa per ottimizzare il tuo flusso di lavoro e aumentare la produttività.

  

Support and Learning Resources

  
  

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