You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.5 KiB
90 lines
2.5 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
|
|
namespace Apewer.Internals
|
|
{
|
|
|
|
internal class Aes256Helper
|
|
{
|
|
|
|
private static byte[] Fill(byte[] argBytes)
|
|
{
|
|
const int MaxLength = 32;
|
|
var result = new byte[MaxLength];
|
|
if ((argBytes == null) || (argBytes.Length == 0))
|
|
{
|
|
for (int i = 0; i < MaxLength; i++) result[i] = 0;
|
|
return result;
|
|
}
|
|
else
|
|
{
|
|
var rl = 0;
|
|
while (true)
|
|
{
|
|
for (int i = 0; i < argBytes.Length; i++)
|
|
{
|
|
if (rl >= MaxLength) return result;
|
|
result[rl] = argBytes[i];
|
|
rl += 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static RijndaelManaged Provider(byte[] argKey)
|
|
{
|
|
var key = argKey ?? Constant.EmptyBytes; // AesFill(argKey);
|
|
var p = new RijndaelManaged();
|
|
p.Key = key;
|
|
p.Mode = CipherMode.ECB;
|
|
p.Padding = PaddingMode.PKCS7;
|
|
return p;
|
|
}
|
|
|
|
public static byte[] Encrypt(byte[] argData)
|
|
{
|
|
return Encrypt(argData, null);
|
|
}
|
|
|
|
/// <summary>对数据进行 AES 加密。</summary>
|
|
public static byte[] Encrypt(byte[] argPlain, byte[] argKey = null)
|
|
{
|
|
if (argPlain == null) return Constant.EmptyBytes;
|
|
if (argPlain.Length == 0) return Constant.EmptyBytes;
|
|
var rm = Provider(argKey);
|
|
var result = new byte[0];
|
|
var ct = rm.CreateEncryptor();
|
|
try
|
|
{
|
|
result = ct.TransformFinalBlock(argPlain, 0, argPlain.Length);
|
|
}
|
|
catch { }
|
|
return result;
|
|
}
|
|
|
|
public static byte[] Decrypt(byte[] argData)
|
|
{
|
|
return Decrypt(argData, null);
|
|
}
|
|
|
|
public static byte[] Decrypt(byte[] argCipher, byte[] argKey)
|
|
{
|
|
if (argCipher == null) return Constant.EmptyBytes;
|
|
if (argCipher.Length == 0) return Constant.EmptyBytes;
|
|
var rm = Provider(argKey);
|
|
var result = new byte[0];
|
|
var ct = rm.CreateDecryptor();
|
|
try
|
|
{
|
|
result = ct.TransformFinalBlock(argCipher, 0, argCipher.Length);
|
|
}
|
|
catch { }
|
|
ct.Dispose();
|
|
return result;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|