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#程序设计有所帮助。

以上是 C#代码实现对AES加密解密 的全部内容, 来源链接: utcz.com/z/314921.html

回到顶部