好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#代码实现对AES加密解密

ES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。

本文实例为大家介绍C#实现对AES加密解密的详细代码,分享给大家供大家参考,具体内容如下

?

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Security.Cryptography;

using System.IO;

 

 

namespace AESDemo

{

  public static class AESHelper

  {

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

   }

  }

}

 

 

不使用向量的方式:

public static class AESCrypto

  {

/// <summary>

/// IV向量为固定值

/// </summary>

   //private static byte[] _iV = {

   // 85, 60, 12, 116,

   // 99, 189, 173, 19,

   // 138, 183, 232, 248,

   // 82, 232, 200, 242

   //};

 

 

   public static byte [] Decrypt( byte [] encryptedBytes, byte [] key)

   {

MemoryStream mStream = new MemoryStream( encryptedBytes );

//mStream.Write( encryptedBytes, 0, encryptedBytes.Length );

//mStream.Seek( 0, SeekOrigin.Begin );

RijndaelManaged aes = new RijndaelManaged( );

    aes.Mode = CipherMode.ECB;

    aes.Padding = PaddingMode.PKCS7;

    aes.KeySize = 128;

aes.Key = key;

//aes.IV = _iV;

CryptoStream cryptoStream = new CryptoStream( mStream, aes.CreateDecryptor( ), CryptoStreamMode.Read );

try {

 

 

byte [] tmp = new byte [ encryptedBytes.Length + 32 ];

int len = cryptoStream.Read( tmp, 0, encryptedBytes.Length + 32 );

byte [] ret = new byte [ len ];

Array.Copy( tmp, 0, ret, 0, len );

return ret;

}

finally {

cryptoStream.Close( );

mStream.Close( );

aes.Clear( );

}

}

 

 

   public static byte [] Encrypt( byte [] plainBytes, byte [] key)

   {

    MemoryStream mStream = new MemoryStream();

    RijndaelManaged aes = new RijndaelManaged();

 

 

    aes.Mode = CipherMode.ECB;

    aes.Padding = PaddingMode.PKCS7;

    aes.KeySize = 128;

    //aes.Key = _key;

 

 

    aes.Key = key;

    //aes.IV = _iV;

    CryptoStream cryptoStream = new CryptoStream(mStream, aes.CreateEncryptor(), CryptoStreamMode.Write);

    try

    {

     cryptoStream.Write(plainBytes, 0, plainBytes.Length);

     cryptoStream.FlushFinalBlock();

     return mStream.ToArray();

    }

    finally

    {

     cryptoStream.Close();

     mStream.Close();

     aes.Clear();

    }

   }

  }

希望通过这篇文章大家对AES加密解密有所了解,对C#程序设计有所帮助。

dy("nrwz");

查看更多关于C#代码实现对AES加密解密的详细内容...

  阅读:79次