AES加密、解密算法 C#版

来源:互联网 发布:java sleep 编辑:程序博客网 时间:2024/04/30 06:51

首先别忘了引用这个空间:using System.Security.Cryptography;

参数是byte[]类型的:

 #region        /// <summary>        /// AES加密        /// </summary>        /// <param name="Data">被加密的明文</param>        /// <param name="Key">密钥</param>        /// <param name="Vector">向量</param>        /// <returns>密文</returns>        public static Byte[] AESEncrypt(Byte[] Data, String Key, String Vector)        {            Byte[] bKey = new Byte[32];            Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);            Byte[] bVector = new Byte[16];            Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);            Byte[] Cryptograph = null; // 加密后的密文            Rijndael Aes = Rijndael.Create();            try            {                // 开辟一块内存流                using (MemoryStream Memory = new MemoryStream())                {                    // 把内存流对象包装成加密流对象                    using (CryptoStream Encryptor = new CryptoStream(Memory,                     Aes.CreateEncryptor(bKey, bVector),                     CryptoStreamMode.Write))                    {                        // 明文数据写入加密流                        Encryptor.Write(Data, 0, Data.Length);                        Encryptor.FlushFinalBlock();                        Cryptograph = Memory.ToArray();                    }                }            }            catch            {                Cryptograph = null;            }            return Cryptograph;        }        /// <summary>        /// AES解密        /// </summary>        /// <param name="Data">被解密的密文</param>        /// <param name="Key">密钥</param>        /// <param name="Vector">向量</param>        /// <returns>明文</returns>        public static Byte[] AESDecrypt(Byte[] Data, String Key, String Vector)        {            Byte[] bKey = new Byte[32];            Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);            Byte[] bVector = new Byte[16];            Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);            Byte[] original = null; // 解密后的明文            Rijndael Aes = Rijndael.Create();            try            {                // 开辟一块内存流,存储密文                using (MemoryStream Memory = new MemoryStream(Data))                {                    // 把内存流对象包装成加密流对象                    using (CryptoStream Decryptor = new CryptoStream(Memory,                    Aes.CreateDecryptor(bKey, bVector),                    CryptoStreamMode.Read))                    {                        // 明文存储区                        using (MemoryStream originalMemory = new MemoryStream())                        {                            Byte[] Buffer = new Byte[1024];                            Int32 readBytes = 0;                            while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)                            {                                originalMemory.Write(Buffer, 0, readBytes);                            }                            original = originalMemory.ToArray();                        }                    }                }            }            catch            {                original = null;            }            return original;        }        #endregion 

参数是string类型的:

 #region        /// <summary>        /// 获取密钥        /// </summary>        private static string Key        {            get { return @")O[NB]6,YF}+efcaj{+oESb9d8>Z'e9M"; }        }        /// <summary>        /// 获取向量        /// </summary>        private static string IV        {            get { return @"L+\~f4,Ir)b$=pkf"; }        }        /// <summary>        /// AES加密        /// </summary>        /// <param name="plainStr">明文字符串</param>        /// <returns>密文</returns>        public static string AESEncrypt(string plainStr)        {            byte[] bKey = Encoding.UTF8.GetBytes(Key);            byte[] bIV = Encoding.UTF8.GetBytes(IV);            byte[] byteArray = Encoding.UTF8.GetBytes(plainStr);            string encrypt = null;            Rijndael aes = Rijndael.Create();            using (MemoryStream mStream = new MemoryStream())            {                using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write))                {                    cStream.Write(byteArray, 0, byteArray.Length);                    cStream.FlushFinalBlock();                    encrypt = Convert.ToBase64String(mStream.ToArray());                }            }            aes.Clear();            return encrypt;        }        /// <summary>        /// AES加密        /// </summary>        /// <param name="plainStr">明文字符串</param>        /// <param name="returnNull">加密失败时是否返回 null,false 返回 String.Empty</param>        /// <returns>密文</returns>        public static string AESEncrypt(string plainStr, bool returnNull)        {            string encrypt = AESEncrypt(plainStr);            return returnNull ? encrypt : (encrypt == null ? String.Empty : encrypt);        }        /// <summary>        /// AES解密        /// </summary>        /// <param name="encryptStr">密文字符串</param>        /// <returns>明文</returns>        public static string AESDecrypt(string encryptStr)        {            byte[] bKey = Encoding.UTF8.GetBytes(Key);            byte[] bIV = Encoding.UTF8.GetBytes(IV);            byte[] byteArray = Convert.FromBase64String(encryptStr);            string decrypt = null;            Rijndael aes = Rijndael.Create();            using (MemoryStream mStream = new MemoryStream())            {                using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write))                {                    cStream.Write(byteArray, 0, byteArray.Length);                    cStream.FlushFinalBlock();                    decrypt = Encoding.UTF8.GetString(mStream.ToArray());                }            }            aes.Clear();            return decrypt;        }        /// <summary>        /// AES解密        /// </summary>        /// <param name="encryptStr">密文字符串</param>        /// <param name="returnNull">解密失败时是否返回 null,false 返回 String.Empty</param>        /// <returns>明文</returns>        public static string AESDecrypt(string encryptStr, bool returnNull)        {            string decrypt = AESDecrypt(encryptStr);            return returnNull ? decrypt : (decrypt == null ? String.Empty : decrypt);        }        #endregion

 

256位AES加密算法,参数是string类型的:

 #region        /// <summary>        /// 256位AES加密        /// </summary>        /// <param name="toEncrypt"></param>        /// <returns></returns>        public static string Encrypt(string toEncrypt)        {            // 256-AES key                byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12345678901234567890123456789012");            byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);            RijndaelManaged rDel = new RijndaelManaged();            rDel.Key = keyArray;            rDel.Mode = CipherMode.ECB;            rDel.Padding = PaddingMode.PKCS7;            ICryptoTransform cTransform = rDel.CreateEncryptor();            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);            return Convert.ToBase64String(resultArray, 0, resultArray.Length);        }        /// <summary>        /// 256位AES解密        /// </summary>        /// <param name="toDecrypt"></param>        /// <returns></returns>        public static string Decrypt(string toDecrypt)        {            // 256-AES key                byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12345678901234567890123456789012");            byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);            RijndaelManaged rDel = new RijndaelManaged();            rDel.Key = keyArray;            rDel.Mode = CipherMode.ECB;            rDel.Padding = PaddingMode.PKCS7;            ICryptoTransform cTransform = rDel.CreateDecryptor();            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);            return UTF8Encoding.UTF8.GetString(resultArray);        }        #endregion

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被烫伤起大水泡怎么办 被烫伤起小水泡怎么办 脚走路磨起泡了怎么办 脚趾头磨了个泡怎么办 脚趾头起了大泡怎么办 脚上有脚气起水泡很痒怎么办 脚底有水泡很痒怎么办 脚底磨得起泡了怎么办 脚底有水泡很疼怎么办 脚底硬皮走路疼怎么办 上火鼻子上长脓包怎么办 鼻子上总是长脓包怎么办 孕妇脚上长水泡很痒怎么办 脚气有水泡很痒怎么办 脚又痒又脱皮怎么办 手指出水泡很痒怎么办 鼻子里上火长泡怎么办 鼻子又干又痒怎么办 眼皮长了小水泡怎么办 眼皮上长了个泡怎么办 眼皮上长了粉刺怎么办 上眼皮又肿又疼怎么办 眼皮长了个痘怎么办 手指上小水泡痒怎么办 阴茎长了一个泡怎么办 干活累的腰疼怎么办 手长白色的小泡怎么办 全身长水泡很痒怎么办 自吸泵声音大怎么办 索尼镜头盖丢了怎么办 15-45镜头盖丢了怎么办 手机镜头盖丢了怎么办 三星微单镜头盖怎么办 大胸走路容易抖怎么办 哎呦该怎么办是什么歌 老婆想爆我菊花怎么办 衣服泡了一晚上怎么办? 来大姨妈了该怎么办 耳机戴不住总掉怎么办 眼睛被辣椒辣了怎么办 电信光猫复位后怎么办