コード例 #1
0
        /// <summary>
        /// 流数据加密
        /// </summary>
        /// <param name="data">数据</param>
        /// <param name="proEntity">加密配置</param>
        /// <returns>加密后流数据,返回MemoryStream</returns>
        /// <exception cref="ArgumentNullException">当加密配置为null时抛出此异常</exception>
        /// <exception cref="Exception">此方法只支持对称加密,如果使用非对称配置,抛出此异常</exception>
        public static Stream Encrypt(Stream data, EncryptionConfigEntity proEntity)
        {
            if (proEntity == null)
            {
                throw new ArgumentNullException("proEntity");
            }

            if (proEntity.SymmetricAlgorithm == false)
            {
                throw new Exception("This method id not intended for asymmetric  encryption");
            }

            //retrive the secret key and iv information
            var provider = proEntity.AlgorithmProvider.CreateInstance <SymmetricAlgorithm>();

            provider.Key = Decryption.Base64ToBytes(proEntity.ExtentProperty["Key"]);
            provider.IV  = Decryption.Base64ToBytes(proEntity.ExtentProperty["IV"]);

            var encryptor = provider.CreateEncryptor();
            var encrypted = new MemoryStream();
            //encrypt the stream symmetrically
            var encStream = new CryptoStream(encrypted, encryptor, CryptoStreamMode.Write);

            var buffer = new byte[1024];
            int count;

            while ((count = data.Read(buffer, 0, 1024)) > 0)
            {
                encStream.Write(buffer, 0, count);
            }
            encStream.FlushFinalBlock();
            encrypted.Position = 0;
            return(encrypted);
        }
コード例 #2
0
        /// <summary>
        /// 解密数据
        /// </summary>
        /// <param name="data">待解密流数据</param>
        /// <param name="proEntity">解密配置</param>
        /// <returns>解密后流数据,返回MemoryStream</returns>
        /// <exception cref="ArgumentNullException">当解密配置为null时抛出此异常</exception>
        /// <exception cref="Exception">此方法只支持对称解密,如果使用非对称配置,抛出此异常</exception>
        public static Stream Decrypt(Stream data, EncryptionConfigEntity proEntity)
        {
            if (proEntity == null)
            {
                throw new ArgumentNullException("proEntity");
            }

            if (proEntity.SymmetricAlgorithm != true)
            {
                throw new Exception("This method id not intended for asymmetric  encryption");
            }
            //retrieve the secret key and iv from the configuration file
            var provider = proEntity.AlgorithmProvider.CreateInstance <SymmetricAlgorithm>();
            var key      = proEntity.ExtentProperty["Key"];
            var iv       = proEntity.ExtentProperty["IV"];

            provider.Key = Decryption.Base64ToBytes(key);
            provider.IV  = Decryption.Base64ToBytes(iv);
            var decryptor = provider.CreateDecryptor();
            //decrypt the stream
            var decStream = new CryptoStream(data, decryptor, CryptoStreamMode.Read);
            var decrypted = new MemoryStream();
            var buffer    = new byte[2048];
            int count;

            while ((count = decStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                decrypted.Write(buffer, 0, count);
            }

            decrypted.Position = 0;
            return(decrypted);
        }