public string DecryptString(string input, string passwordToBeUsedInSecreKey)
        {
            input = input.Replace('|', '=');
            input = input.Replace('_', '/');
            input = input.Replace('¬', '+');

            SymmetricParameters myParameters = GenerateSymmetricParameters(passwordToBeUsedInSecreKey);

            Rijndael myAlg = Rijndael.Create();

            myAlg.Key = myParameters.SecretKey;
            myAlg.IV  = myParameters.IV;

            byte[] encryptedDataAsBytes = Convert.FromBase64String(input); //Converting user input to byte[]

            MemoryStream msEncryptedData = new MemoryStream(encryptedDataAsBytes);

            CryptoStream cs = new CryptoStream(msEncryptedData, myAlg.CreateDecryptor(), CryptoStreamMode.Read);

            MemoryStream msClearData = new MemoryStream();

            cs.CopyTo(msClearData);

            byte[] clearDataAsBytes = msClearData.ToArray();
            string clearData        = Encoding.UTF32.GetString(clearDataAsBytes); //converting the cryptographic data to string

            return(clearData);
        }
        public Stream HybridEncryptFile(Stream article, string username, string publickey)
        {
            //1. Generate the secret key and the IV from the username
            //>> SymmetricParameters
            SymmetricParameters myParameters = GenerateSymmetricParameters(username);

            //2.Encrypt the file using the methodEncryptSymmetricallyFile with the parameters from step 1.
            Stream encrypted = EncryptSymmetricallyFile(article, myParameters);

            //3. encrypt the secret key and the iv using the public key and using the method EncryptAsymmetricallyKey
            Stream encryptedSecretKey = EncryptAsymmetricallyKey(myParameters.SecretKey, publickey);
            Stream encryptedIV        = EncryptAsymmetricallyKey(myParameters.IV, publickey);

            //4. you store the encrypted secret key(from no.3) + the encrypted iv (from no.3) + encrypted file content (from no.2)

            MemoryStream msEncryptedFile = new MemoryStream();

            encryptedSecretKey.Position = 0;
            encryptedIV.Position        = 0;
            encryptedSecretKey.CopyTo(msEncryptedFile);
            encryptedIV.CopyTo(msEncryptedFile);
            encrypted.Position = 0;
            encrypted.CopyTo(msEncryptedFile);

            return(msEncryptedFile);
        }
        public SymmetricParameters GenerateSymmetricParameters(string input)
        {
            Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(input, new byte[] { 20, 255, 1, 16, 54, 78, 68, 10, 52, 38, 20, 87, 91 });

            Rijndael myAlg = Rijndael.Create();

            SymmetricParameters myParams = new SymmetricParameters()
            {
                SecretKey = rfc.GetBytes(myAlg.KeySize / 8),
                IV        = rfc.GetBytes(myAlg.BlockSize / 8)
            };

            return(myParams);
        }
        public MemoryStream EncryptSymmetricallyFile(Stream input, SymmetricParameters myParameters)
        {
            Rijndael myAlg = Rijndael.Create();

            myAlg.Key = myParameters.SecretKey;
            myAlg.IV  = myParameters.IV;

            CryptoStream cs = new CryptoStream(input, myAlg.CreateEncryptor(), CryptoStreamMode.Read);

            MemoryStream msEncryptedData = new MemoryStream();

            cs.CopyTo(msEncryptedData);

            return(msEncryptedData);
        }