/******************************************************************************* * You may amend and distribute as you like, but don't remove this header! * * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets. * See http://www.codeplex.com/EPPlus for details. * * Copyright (C) 2011 Jan Källman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html * * All code and executables are provided "as is" with no warranty either express or implied. * The author accepts no liability for any damage or loss of business that this product may cause. * * Code change notes: * *************************************************************************************** * This class is created with the help of the MS-OFFCRYPTO PDF documentation... http://msdn.microsoft.com/en-us/library/cc313071(office.12).aspx * Decrypytion library for Office Open XML files(Lyquidity) and Sminks very nice example * on "Reading compound documents in c#" on Stackoverflow. Many thanks! *************************************************************************************** * * Code change notes: * * Author Change Date ******************************************************************************* * Jan Källman Added 10-AUG-2010 * Jan Källman License changed GPL-->LGPL 2011-12-27 *******************************************************************************/ using System; using System.Collections.Generic; using System.Text; namespace OfficeOpenXml { /// /// Encryption Algorithm /// public enum EncryptionAlgorithm { /// /// 128-bit AES. Default /// AES128, /// /// 192-bit AES. /// AES192, /// /// 256-bit AES. /// AES256 } /// /// The major version of the Encryption /// public enum EncryptionVersion { /// /// Standard Encryption. /// Used in Excel 2007 and previous version with compatibility pack. /// Default AES 128 with SHA-1 as the hash algorithm. Spincount is hardcoded to 50000 /// Standard, /// /// Agile Encryption. /// Used in Excel 2010- /// Default. /// Agile } /// /// How and if the workbook is encrypted /// /// /// public class ExcelEncryption { /// /// Constructor /// Default AES 256 with SHA-512 as the hash algorithm. Spincount is set to 100000 /// internal ExcelEncryption() { Algorithm = EncryptionAlgorithm.AES256; } /// /// Constructor /// /// Algorithm used to encrypt the package. Default is AES128 internal ExcelEncryption(EncryptionAlgorithm encryptionAlgorithm) { Algorithm = encryptionAlgorithm; } bool _isEncrypted = false; /// /// Is the package encrypted /// public bool IsEncrypted { get { return _isEncrypted; } set { _isEncrypted = value; if (_isEncrypted) { if (_password == null) _password = ""; } else { _password = null; } } } string _password=null; /// /// The password used to encrypt the workbook. /// public string Password { get { return _password; } set { _password = value; _isEncrypted = (value != null); } } /// /// Algorithm used for encrypting the package. Default is AES 128-bit for standard and AES 256 for agile /// public EncryptionAlgorithm Algorithm { get; set; } private EncryptionVersion _version = EncryptionVersion.Agile; /// /// The version of the encryption. /// public EncryptionVersion Version { get { return _version; } set { if (value != Version) { if (value == EncryptionVersion.Agile) { Algorithm = EncryptionAlgorithm.AES256; } else { Algorithm = EncryptionAlgorithm.AES128; } _version = value; } } } } }