#region AES加密
private byte[] AESEncrypt(byte[] data, string key)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] buffer = md5.ComputeHash(Encoding.Default.GetBytes(key));
byte[] bKey = GetKey(buffer);
byte[] bVector = md5.ComputeHash(Encoding.Default.GetBytes("Wen"));
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 (Exception e)
{
this.msg = e.Message;
Cryptograph = null;
}
return Cryptograph;
}
#endregion
#region AES解密
public byte[] AESDecrypt(byte[] data, string key)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] buffer = md5.ComputeHash(Encoding.Default.GetBytes(key));
byte[] bKey = GetKey(buffer);
byte[] bVector = md5.ComputeHash(Encoding.Default.GetBytes("Wen"));
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];
int readBytes = 0;
while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
{
originalMemory.Write(Buffer, 0, readBytes);
}
original = originalMemory.ToArray();
}
}
}
}
catch (Exception e)
{
msg = e.Message;
original = null;
}
return original;
}
#endregion
#region 将byte数组从正序至反序添加到key
private byte[] GetKey(byte[] buffer)
{
byte[] key = new byte[buffer.Length * 2];
for (int i = 0; i < key.Length; i++)
{
if (i >= buffer.Length)
{
key[i] = buffer[buffer.Length - (i / buffer.Length + i % buffer.Length)];
}
else
{
key[i] = buffer[i];
}
}
return key;
}
#endregion
#region 用二进制方式读取文件
private byte[] ReadFileByByte(string fileName)
{
byte[] data;
try
{
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
data = new byte[fs.Length];
int offset = 0;
int remaining = data.Length;
while (remaining > 0)
{
int read = fs.Read(data, offset, remaining);
if (read <= 0) throw new EndOfStreamException("File read failure!");
remaining -= read;
offset += read;
}
}
}
catch (Exception e)
{
data = null;
this.msg = e.Message;
}
return data;
}
#endregion
#region 以二进制形式将数据写入文件
private bool WriteFileByByte(string fileName, byte[] data)
{
try
{
using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
fs.Write(data, 0, data.Length);
return true;
}
}
catch (Exception e)
{
this.msg = e.Message;
return false;
}
}
#endregion