Ejemplo n.º 1
0
        public static void Decrypt(Stream inputStream, Stream outputStream, EncryptedAesKey encryptedAesKey, RSAParameters receiverKey)
        {
            if (inputStream == null)
            {
                throw new ArgumentNullException(nameof(inputStream));
            }
            if (encryptedAesKey == null)
            {
                throw new ArgumentNullException(nameof(encryptedAesKey));
            }

            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            {
                rsa.ImportParameters(receiverKey);
                var decryptedKey = rsa.Decrypt(encryptedAesKey.EncryptedKey, false);
                var decryptedIv  = rsa.Decrypt(encryptedAesKey.EncryptedIV, false);

                using (Aes aes = Aes.Create())
                {
                    if (aes == null)
                    {
                        throw new Exception("Error while initializing AES instance.");
                    }

                    aes.Key = decryptedKey;
                    aes.IV  = decryptedIv;

                    ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
                    inputStream.Position = 0;
                    CryptoTransformStream(inputStream, outputStream, decryptor);
                }
            }
        }
Ejemplo n.º 2
0
        public static Dictionary <string, EncryptedAesKey> Encrypt(Stream inputStream, Stream outputStream, List <Receiver> receiversList)
        {
            if (inputStream == null)
            {
                throw new ArgumentNullException(nameof(inputStream));
            }
            if (receiversList == null)
            {
                throw new ArgumentNullException(nameof(receiversList));
            }
            inputStream.Position = 0;

            using (Aes aes = Aes.Create())
            {
                if (aes == null)
                {
                    throw new Exception("Error while initializing AES instance.");
                }

                aes.GenerateKey();
                aes.GenerateIV();

                ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
                CryptoTransformStream(inputStream, outputStream, encryptor);

                var encryptedKeys = new Dictionary <string, EncryptedAesKey>();
                foreach (var receiver in receiversList)
                {
                    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                    {
                        rsa.ImportParameters(receiver.RsaKey);

                        var encryptedKey = rsa.Encrypt(aes.Key, false);
                        var encryptedIv  = rsa.Encrypt(aes.IV, false);

                        var userAesKey = new EncryptedAesKey(encryptedKey, encryptedIv);

                        encryptedKeys.Add(receiver.Email, userAesKey);
                    }
                }

                return(encryptedKeys);
            }
        }