using System.IO;
using System.Security.Cryptography;
namespace Apewer.Internals
{
class DesHelper
{
private static byte[] Fill(byte[] argbytes)
{
const int MaxLength = 8;
var vresult = new byte[MaxLength];
if ((argbytes == null) || (argbytes.Length == 0))
{
for (int i = 0; i < MaxLength; i++) vresult[i] = 0;
return vresult;
}
else
{
var vrl = 0;
while (true)
{
for (int i = 0; i < argbytes.Length; i++)
{
if (vrl >= MaxLength) return vresult;
vresult[vrl] = argbytes[i];
vrl += 1;
}
}
}
}
private static DESCryptoServiceProvider Provider(byte[] argkey, byte[] argvector)
{
var vkey = Fill(argkey);
var viv = Fill(argvector);
var vcsp = new DESCryptoServiceProvider();
vcsp.Key = vkey;
vcsp.IV = viv;
return vcsp;
}
/// 对数据进行 DES 加密。
private static byte[] Encrypt(byte[] argdata, byte[] argkey, byte[] argvector)
{
if ((argdata == null) || (argdata.Length == 0)) return argdata;
var vresult = Constant.EmptyBytes;
var vms = new MemoryStream();
var vcs = new CryptoStream(vms, Provider(argkey, argvector).CreateEncryptor(), CryptoStreamMode.Write);
//try
{
vcs.Write(argdata, 0, argdata.Length);
vcs.FlushFinalBlock();
vresult = vms.ToArray();
}
//finally { }
vcs.Dispose();
vms.Dispose();
return vresult;
}
/// 对数据进行 DES 解密。
private static byte[] Decrypt(byte[] argdata, byte[] argkey, byte[] argvector)
{
if ((argdata == null) || (argdata.Length == 0)) return argdata;
var vresult =Constant. EmptyBytes;
var vms = new MemoryStream();
var vcs = new CryptoStream(vms, Provider(argkey, argvector).CreateDecryptor(), CryptoStreamMode.Write);
//try
{
vcs.Write(argdata, 0, argdata.Length);
vcs.FlushFinalBlock();
vresult = vms.ToArray();
}
//finally { }
vcs.Dispose();
vms.Dispose();
return vresult;
}
}
}