AES加密

 AES算法描述简介:

DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,
因此1997年NIST公开征集新的数据加密标准,即AES。经过三轮的筛选,比利时Joan Daeman和Vincent Rijmen提
交的Rijndael算法被提议为AES的最终算法。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。
尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、
易用和灵活等优点。AES设计有三个密钥长度:128,192,256位,相对而言,AES的128密钥比DES的56密钥强1021倍

  /// <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;
  }

你可能感兴趣的:(aes)