using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace Apewer.Internals
{
internal class AesHelper
{
private static long AesSteam(ICryptoTransform argCT, Stream argInput, Stream argOutput)
{
long vcount = 0;
var vcs = new CryptoStream(argOutput, argCT, CryptoStreamMode.Write);
try
{
vcount = StreamHelper.Read(argInput, argOutput);
vcs.FlushFinalBlock();
}
catch (Exception argException)
{
throw argException;
}
vcs.Dispose();
return vcount;
}
/// 对数据进行 AES 加密。
public static byte[] AesEncrypt(byte[] argdata, byte[] argkey, byte[] argvector)
{
var vkey = (argkey == null) ? new byte[0] : argkey;
RijndaelManaged vrm = new RijndaelManaged();
vrm.KeySize = (argkey.Length <= 128) ? 128 : ((argkey.Length <= 192) ? 192 : 256);
var viv = vrm.IV;
var vr = Rijndael.Create();
var vct = vr.CreateEncryptor(vkey, viv);
var vinput = new MemoryStream(argdata);
var voutput = new MemoryStream();
AesSteam(vct, vinput, voutput);
vinput.Dispose();
var vresult = voutput.ToArray();
voutput.Dispose();
return vresult;
}
/// 对数据进行 AES 解密。
public static byte[] AesDecrypt(byte[] argdata, byte[] argkey, byte[] argvector)
{
var vkey = (argkey == null) ? new byte[0] : argkey;
RijndaelManaged vrm = new RijndaelManaged();
vrm.KeySize = (argkey.Length <= 128) ? 128 : ((argkey.Length <= 192) ? 192 : 256);
var viv = vrm.IV;
var vr = Rijndael.Create();
var vct = vr.CreateDecryptor(vkey, viv);
var vinput = new MemoryStream(argdata);
var voutput = new MemoryStream();
AesSteam(vct, vinput, voutput);
vinput.Dispose();
var vresult = voutput.ToArray();
voutput.Dispose();
return vresult;
}
}
}