Security C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Security;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.IO;
using System.Text;
namespace UltraRDC
{
    public class CryptoUtilities
    {
        private CryptoUtilities()
        {
        }
        public static byte[] Decrypt(SecureString key, byte[] data)
        {
            Rijndael encryption = Rijndael.Create();
            encryption.KeySize = 256;
            IntPtr marshalledKeyBytes = Marshal.SecureStringToGlobalAllocAnsi(key);
            byte[] keyBytes = new byte[encryption.KeySize / 8];
            byte[] decryptedData = new byte[data.Length];
            Marshal.Copy(marshalledKeyBytes, keyBytes, 0, Math.Min(keyBytes.Length, key.Length));
            encryption.Key = keyBytes;
            encryption.IV = Convert.FromBase64String("QGWyKbe+W9H0mL2igm73jw==");
            MemoryStream memoryStream = new MemoryStream(data, 0, data.Length);
            CryptoStream cryptoStream = new CryptoStream(memoryStream, encryption.CreateDecryptor(), CryptoStreamMode.Read);
            cryptoStream.Read(decryptedData, 0, decryptedData.Length);
            cryptoStream.Close();
            memoryStream.Close();
            for (int i = 0; i < keyBytes.Length; i++)
                keyBytes[i] = 0;
            Marshal.ZeroFreeGlobalAllocAnsi(marshalledKeyBytes);
            return decryptedData;
        }
        public static byte[] Encrypt(SecureString key, byte[] data)
        {
            Rijndael encryption = Rijndael.Create();
            encryption.KeySize = 256;
            IntPtr marshalledKeyBytes = Marshal.SecureStringToGlobalAllocAnsi(key);
            byte[] keyBytes = new byte[encryption.KeySize / 8];
            Marshal.Copy(marshalledKeyBytes, keyBytes, 0, Math.Min(keyBytes.Length, key.Length));
            encryption.Key = keyBytes;
            encryption.IV = Convert.FromBase64String("QGWyKbe+W9H0mL2igm73jw==");
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream, encryption.CreateEncryptor(), CryptoStreamMode.Write);
            cryptoStream.Write(data, 0, data.Length);
            cryptoStream.Close();
            memoryStream.Close();
            for (int i = 0; i < keyBytes.Length; i++)
                keyBytes[i] = 0;
            Marshal.ZeroFreeGlobalAllocAnsi(marshalledKeyBytes);
            return memoryStream.ToArray();
        }
        public static byte[] Encrypt(SecureString key, string data)
        {
            return Encrypt(key, Encoding.ASCII.GetBytes(data));
        }
        public static byte[] Encrypt(SecureString key, SecureString data)
        {
            IntPtr marshalledDataBytes = Marshal.SecureStringToGlobalAllocAnsi(data);
            byte[] dataBytes = new byte[data.Length];
            Marshal.Copy(marshalledDataBytes, dataBytes, 0, dataBytes.Length);
            byte[] encryptedData = Encrypt(key, dataBytes);
            for (int i = 0; i < dataBytes.Length; i++)
                dataBytes[i] = 0;
            Marshal.ZeroFreeGlobalAllocAnsi(marshalledDataBytes);
            return encryptedData;
        }
    }
}