// EncryptionAlgorithm.cs // ------------------------------------------------------------------ // // Copyright (c) 2009 Dino Chiesa // All rights reserved. // // This code module is part of DotNetZip, a zipfile class library. // // ------------------------------------------------------------------ // // This code is licensed under the Microsoft Public License. // See the file License.txt for the license details. // More info on: http://dotnetzip.codeplex.com // // ------------------------------------------------------------------ // // last saved (in emacs): // Time-stamp: <2009-October-21 17:24:45> // // ------------------------------------------------------------------ // // This module defines the EncryptionAgorithm enum // // // ------------------------------------------------------------------ namespace OfficeOpenXml.Packaging.Ionic.Zip { /// /// An enum that provides the various encryption algorithms supported by this /// library. /// /// /// /// /// /// PkzipWeak implies the use of Zip 2.0 encryption, which is known to be /// weak and subvertible. /// /// /// /// A note on interoperability: Values of PkzipWeak and None are /// specified in PKWARE's zip /// specification, and are considered to be "standard". Zip archives /// produced using these options will be interoperable with many other zip tools /// and libraries, including Windows Explorer. /// /// /// /// Values of WinZipAes128 and WinZipAes256 are not part of the Zip /// specification, but rather imply the use of a vendor-specific extension from /// WinZip. If you want to produce interoperable Zip archives, do not use these /// values. For example, if you produce a zip archive using WinZipAes256, you /// will be able to open it in Windows Explorer on Windows XP and Vista, but you /// will not be able to extract entries; trying this will lead to an "unspecified /// error". For this reason, some people have said that a zip archive that uses /// WinZip's AES encryption is not actually a zip archive at all. A zip archive /// produced this way will be readable with the WinZip tool (Version 11 and /// beyond). /// /// /// /// There are other third-party tools and libraries, both commercial and /// otherwise, that support WinZip's AES encryption. These will be able to read /// AES-encrypted zip archives produced by DotNetZip, and conversely applications /// that use DotNetZip to read zip archives will be able to read AES-encrypted /// archives produced by those tools or libraries. Consult the documentation for /// those other tools and libraries to find out if WinZip's AES encryption is /// supported. /// /// /// /// In case you care: According to the WinZip specification, the /// actual AES key used is derived from the via an /// algorithm that complies with RFC 2898, using an iteration /// count of 1000. The algorithm is sometimes referred to as PBKDF2, which stands /// for "Password Based Key Derivation Function #2". /// /// /// /// A word about password strength and length: The AES encryption technology is /// very good, but any system is only as secure as the weakest link. If you want /// to secure your data, be sure to use a password that is hard to guess. To make /// it harder to guess (increase its "entropy"), you should make it longer. If /// you use normal characters from an ASCII keyboard, a password of length 20 will /// be strong enough that it will be impossible to guess. For more information on /// that, I'd encourage you to read this /// article. /// /// /// /// The WinZip AES algorithms are not supported with the version of DotNetZip that /// runs on the .NET Compact Framework. This is because .NET CF lacks the /// HMACSHA1 class that is required for producing the archive. /// /// internal enum EncryptionAlgorithm { /// /// No encryption at all. /// None = 0, /// /// Traditional or Classic pkzip encryption. /// PkzipWeak, #if AESCRYPTO /// /// WinZip AES encryption (128 key bits). /// WinZipAes128, /// /// WinZip AES encryption (256 key bits). /// WinZipAes256, #endif /// /// An encryption algorithm that is not supported by DotNetZip. /// Unsupported = 4, // others... not implemented (yet?) } }