Panoramica

La sicurezza dei dati è fondamentale nel panorama digitale odierno e un modo efficace per salvaguardare le informazioni sensibili è attraverso la crittografia. Questa panoramica ti guiderà su come crittografare o decrittografare un intero archivio o voci specifiche al suo interno, garantendo la riservatezza e l'integrità dei tuoi dati. Aspose.ZIP facilita una serie di operazioni relative alla crittografia e decrittografia degli archivi.

Come crittografare o decrittografare l'intero archivio ZIP

Crittografa l'archivio Zip con il metodo tradizionale

Sono disponibili due metodi di crittografia per l’archivio ZIP: tradizionale, considerato ora debole, e moderno AES. Lo standard ZIP consente di crittografare qualsiasi voce con uno di questi metodi anche all’interno dello stesso archivio. La crittografia AES offre una maggiore sicurezza ed è disponibile con chiavi di diverse lunghezze (128 bit, 192 bit e 256 bit). Fornisce una migliore protezione per i dati sensibili all’interno degli archivi ZIP.

File compressi con 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);
        }
    }

Crittografia dell'intero archivio con il metodo 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);
            }
        }
    }

Questi esempi mostrano come incorporare istanze di EncryptionSetting nel corrispondente Costruttore di archivio . Ciò consente la crittografia selettiva delle singole voci, mantenendo le altre non crittografate.

Crittografa la seconda voce delle tre nell'archivio zip

    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);
        }
    }

Sebbene possa sembrare non convenzionale, è effettivamente possibile crittografare voci specifiche all’interno di un archivio ZIP utilizzando diversi metodi di crittografia e password. 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 potrebbe complicare il processo di gestione e decrittografia e la compatibilità con i vari strumenti di archiviazione ZIP potrebbe variare.

Crittografa Zip con metodi e password diversi

    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 consente di aggiungere la crittografia a un archivio esistente senza reimballare completamente i contenuti. Tuttavia, è importante notare che tutte le voci dell’archivio non devono essere protette; in caso contrario verrà sollevata un’eccezione.

Crittografa l'archivio ZIP esistente

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

Decifrare un archivio Zip

L’utente ha la possibilità di decrittografare una voce specifica all’interno dell’archivio ZIP crittografato o l’intero archivio nel suo insieme.

Decifrare una voce particolare

    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);
        }
    }

Decrittografa l'intero archivio Zip

In questo caso dobbiamo fornire la password all’interno di un costruttore.

    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);
            }
        }
    }

Come crittografare o decrittografare l'archivio RAR

Decifrare un archivio RAR

Aspose.ZIP non supporta la composizione dell’archivio RAR, supporta solo l’estrazione. L’archivio RAR può essere crittografato con o senza protezione dei nomi dei file.
Nel primo caso l’utente deve fornire la password di decrittazione all’interno di RarArchiveLoadOptions all’inizio dell’istanziazione dell’archivio RAR. In quest’ultimo caso è possibile passare la password successivamente all’estrazione della voce.

Decrittografa l'intero archivio RAR con nomi di file crittografati

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

Decifrare una voce particolare dall'archivio RAR

Questo esempio funzionerebbe se solo il contenuto delle voci fosse crittografato ma i nomi dei file no.

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

Decrittografa una voce particolare dall'archivio RAR come flusso

Tuttavia, in questo esempio , il presupposto è che solo il contenuto delle voci sia crittografato, non i nomi dei file . Ciò richiede la copia dei byte di ingresso in un flusso di memoria.

    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);
            }
        }
    }

Come crittografare o decrittografare l'intero archivio 7ZIP

Metodi per crittografare i file di archivio 7z

L’unica opzione di crittografia dell’archivio 7z è AES .

Crittografa e comprimi con LZMA2 l'intero archivio 7z

Gli archivi 7Z supportano la possibilità di crittografare ogni voce con la propria password o di lasciarla non protetta.

    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);
        }
    }

Crittografa le voci dell'archivio 7z con le proprie password e lascia una voce non crittografata

Simile a ZIP, l’utente può decrittografare l’intero archivio o una voce specifica da esso.
L’archivio 7Z può essere crittografato con o senza protezione dei nomi dei file. Se i nomi dei file sono crittografati, è necessario fornire una password durante la creazione di un’istanza dell’archivio .

    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);
        }
    }

Decrittografa l'intero archivio con nomi di file crittografati nella directory

Indipendentemente dal fatto che i nomi dei file siano crittografati o meno, è sicuro fornire la password all’interno del costruttore di estrazione.
L’esempio seguente funzionerà solo quando è protetto solo il contenuto.

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

Decifrare una voce particolare

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

Support and Learning Resources

  
  

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