C#AES加密解密

下面的示例演示如何使用 AesCryptoServiceProvider 类对示例数据进行加密和解密。

1.命名空间的引用:

using System.IO;
using System.Security.Cryptography;

2.方法的调用:

            string original = "Here is some data to encrypt!";
            using (AesCryptoServiceProvider myAes = new AesCryptoServiceProvider())
            {
                byte[] encrypted = EncryptStringToBytes_Aes(original, myAes.Key, myAes.IV);

                string roundtrip = DecryptStringFromBytes_Aes(encrypted, myAes.Key, myAes.IV);

                //Display the original data and the decrypted data.
                Console.WriteLine("Original:   {0}", original);
                Console.WriteLine("Round Trip: {0}", roundtrip);
            }

3.加密

private static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
        {
            if (plainText == null || plainText.Length <= 0)
                throw new ArgumentNullException("plainText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");
            byte[] encrypted;

            using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;

                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }
            return encrypted;
        }
4.解密
       private static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
       {
           if (cipherText == null || cipherText.Length <= 0)
               throw new ArgumentNullException("cipherText");
           if (Key == null || Key.Length <= 0)
               throw new ArgumentNullException("Key");
           if (IV == null || IV.Length <= 0)
               throw new ArgumentNullException("IV");

           string plaintext = null;

           using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
           {
               aesAlg.Key = Key;
               aesAlg.IV = IV;

               ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

               using (MemoryStream msDecrypt = new MemoryStream(cipherText))
               {
                   using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                   {
                       using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                       {
                           plaintext = srDecrypt.ReadToEnd();
                       }
                   }
               }
           }

           return plaintext;
       }

posted @   Loving伊  阅读(1105)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示