zoukankan      html  css  js  c++  java
  • EncryptTransform

    internal class EncryptTransform
        {
            //private const int c_MaxLengthOf_IV_DES = 4;
            //private const int c_MaxLengthOf_IV_RC2 = 4;
            //private const int c_MaxLengthOf_IV_RIJNDAEL = 8;
            //private const int c_MaxLengthOf_IV_TRIPLEDES = 4;
            //private const int c_MaxLengthOf_Key_DES = 4;
            //private const int c_MaxLengthOf_Key_RC2 = 4;
            //private const int c_MaxLengthOf_Key_RIJNDAEL_1 = 8;
            //private const int c_MaxLengthOf_Key_RIJNDAEL_2 = 12;
            //private const int c_MaxLengthOf_Key_TRIPLEDES_1 = 8;
            //private const int c_MaxLengthOf_Key_TRIPLEDES_2 = 12;
    
            private byte[] m_Key = null;
    
            /// <summary>
            /// 获取或设置加密解密过程中使用的明文密码
            /// </summary>
            public byte[] Key
            {
                get { return m_Key; }
                set { m_Key = value; }
            }
    
    
            private byte[] m_initVec = null;
            /// <summary>
            /// 获取或设置加密解密过程中使用的初始化向量
            /// </summary>
            public byte[] InitVec
            {
                get { return m_initVec; }
                set { m_initVec = value; }
            }
    
            public EncryptTransform(byte[] key, byte[] initVector)
            {
                this.m_Key = key;
                this.m_initVec = initVector;
            }
            /// <summary>
            /// 根据提供的枚举信息,获得需要使用的解密算法的接口
            /// </summary>
            /// <param name="algorithm"></param>
            /// <returns></returns>
            internal ICryptoTransform GetDecryptoServiceProvider(EncryptionAlgorithm algorithm)
            {
                switch (algorithm)
                {
                    case EncryptionAlgorithm.Des:
                        {
                            DES des = new DESCryptoServiceProvider();
                            des.Mode = CipherMode.CBC;
                            if (this.m_Key != null)
                            {
                                des.Key = m_Key;
                            }
                            if (m_initVec != null)
                            {
                                des.IV = m_initVec;
                            }
                            return des.CreateDecryptor();
                        }
                    case EncryptionAlgorithm.Rc2:
                        {
                            RC2 rc = new RC2CryptoServiceProvider();
                            rc.Mode = CipherMode.CBC;
                            return rc.CreateDecryptor(m_Key, m_initVec);
                        }
                    case EncryptionAlgorithm.Rijndael:
                        {
                            Rijndael rijndael = new RijndaelManaged();
                            rijndael.Mode = CipherMode.CBC;
                            return rijndael.CreateDecryptor(m_Key, m_initVec);
                        }
                    case EncryptionAlgorithm.TripleDes:
                        {
                            TripleDES edes = new TripleDESCryptoServiceProvider();
                            edes.Mode = CipherMode.CBC;
                            return edes.CreateDecryptor(m_Key, m_initVec);
                        }
                }
                throw new CryptographicException("Algorithm ID '" + algorithm + "' not supported.");
            }
    
            /// <summary>
            /// 根据提供的枚举信息,获得需要使用的加密算法的接口
            /// </summary>
            /// <param name="algorithm">算法枚举</param>
            /// <returns></returns>
            internal ICryptoTransform GetEncryptoServiceProvider(EncryptionAlgorithm algorithm)
            {
    
                switch (algorithm)
                {
                    case EncryptionAlgorithm.Des:
                        {
                            DES des = new DESCryptoServiceProvider();
                            des.Mode = CipherMode.CBC;
                            if (null != m_Key)
                            {
                                des.Key = m_Key;
                            }
                            else
                            {
                                m_Key = des.Key;
                            }
                            if (null != m_initVec)
                            {
                                des.IV = m_initVec;
                            }
                            else
                            {
                                m_initVec = des.IV;
                            }
                            return des.CreateEncryptor();
                        }
    
    
                    case EncryptionAlgorithm.Rc2:
                        {
                            RC2 rc = new RC2CryptoServiceProvider();
                            rc.Mode = CipherMode.CBC;
                            if (null != m_Key)
                            {
                                rc.Key = m_Key;
                            }
                            else
                            {
                                m_Key = rc.Key;
                            }
                            if (null != m_initVec)
                            {
                                rc.IV = m_initVec;
                            }
                            else
                            {
                                m_initVec = rc.IV;
                            }
                            return rc.CreateEncryptor();
                        }
                    case EncryptionAlgorithm.Rijndael:
                        {
                            Rijndael rijndael = new RijndaelManaged();
                            rijndael.Mode = CipherMode.CBC;
                            if (null != m_Key)
                            {
                                rijndael.Key = m_Key;
                            }
                            else
                            {
                                m_Key = rijndael.Key;
                            }
                            if (null != m_initVec)
                            {
                                rijndael.IV = m_initVec;
                            }
                            else
                            {
                                m_initVec = rijndael.IV;
                            }
                            return rijndael.CreateEncryptor();
                        }
                    case EncryptionAlgorithm.TripleDes:
                        {
                            TripleDES edes = new TripleDESCryptoServiceProvider();
                            edes.Mode = CipherMode.CBC;
                            if (null != m_Key)
                            {
                                edes.Key = m_Key;
                            }
                            else
                            {
                                m_Key = edes.Key;
                            }
                            if (null != m_initVec)
                            {
                                edes.IV = m_initVec;
                            }
                            else
                            {
                                m_initVec = edes.IV;
                            }
                            return edes.CreateEncryptor();
                        }
                    default:
                        throw new CryptographicException("Algorithm ID '" + algorithm + "' not supported.");
                }
                
            }
    
            /// <summary>
            /// 提供具体实现解密的方法
            /// </summary>
            /// <param name="algorithm"></param>
            /// <param name="bytesData">需要解密的信息</param>
            /// <returns></returns>
            public byte[] Decrypt(EncryptionAlgorithm algorithm, byte[] bytesData)
            {
                byte[] result = new byte[0];
                using (MemoryStream stream = new MemoryStream())
                {
                    ICryptoTransform cryptoServiceProvider = GetDecryptoServiceProvider(algorithm);
                    using (CryptoStream stream2 = new CryptoStream(stream, cryptoServiceProvider, CryptoStreamMode.Write))
                    {
                        try
                        {
                            stream2.Write(bytesData, 0, bytesData.Length);
                            stream2.FlushFinalBlock();
                            stream2.Close();
                            result = stream.ToArray();
                        }
                        catch (Exception exception)
                        {
                            throw new Exception("Error while writing decrypted data to the stream: 
    " + exception.Message);
                        }
                    }
                    stream.Close();
                }
                return result;
            }
            /// <summary>
            /// 提供具体实现加密的方法
            /// </summary>
            /// <param name="algorithm"></param>
            /// <param name="bytesData">需要加密的信息</param>
            /// <returns></returns>
            public byte[] Encrypt(EncryptionAlgorithm algorithm, byte[] bytesData)
            {
                byte[] result = new byte[0];
                using (MemoryStream stream = new MemoryStream())
                {
                    ICryptoTransform cryptoServiceProvider = this.GetEncryptoServiceProvider(algorithm);
                    using (CryptoStream stream2 = new CryptoStream(stream, cryptoServiceProvider, CryptoStreamMode.Write))
                    {
                        try
                        {
                            stream2.Write(bytesData, 0, bytesData.Length);
                            stream2.FlushFinalBlock();
                            stream2.Close();
                            result = stream.ToArray();
                        }
                        catch (Exception exception)
                        {
                            throw new Exception("Error while writing encrypted data to the stream: 
    " + exception.Message);
                        }
                    }
                    stream.Close();
                }
                return result;
            }
    
    
        }
  • 相关阅读:
    剑指OFFER之合并有序链表(九度OJ1519)
    剑指OFFER之反转链表(九度OJ1518)
    剑指OFFER之链表中倒数第k个节点(九度OJ1517)
    一分钟教你在博客园中制作自己的动态云球形标签页
    剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)
    剑指OFFER之打印1到最大的N位数(九度OJ1515)
    剑指OFFER之矩形覆盖(九度OJ1390)
    剑指OFFER之数值的整数次方(九度OJ1514)
    剑指OFFER之变态跳台阶(九度OJ1389)
    剑指OFFER之二进制中1的个数(九度OJ1513)
  • 原文地址:https://www.cnblogs.com/Wolfmanlq/p/4183437.html
Copyright © 2011-2022 走看看