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>
发表评论