AES对称加密解密类
2016-02-01 17:03:36 访问(2152) 赞(0) 踩(0)
using System;
using System.Text;
using System.Security.Cryptography;
namespace eKing.AodbLib.Utils
{
/// <summary>
/// AES对称加密解密类
/// </summary>
public class AESHelper_Base64
{
#region 成员变量
/// <summary>
/// 密钥(32位,不足在后面补0)
/// </summary>
private const string _passwd = "ihlih*0037JOHT*)(PIJY*(()JI^)IO%";
/// <summary>
/// 运算模式
/// </summary>
private static CipherMode _cipherMode = CipherMode.ECB;
/// <summary>
/// 填充模式
/// </summary>
private static PaddingMode _paddingMode = PaddingMode.PKCS7;
/// <summary>
///// 字符串采用的编码
/// </summary>
private static Encoding _encoding = Encoding.UTF8;
#endregion
#region 辅助方法
/// <summary>
/// 获取32byte密钥数据
/// </summary>
/// <param name="password">密码</param>
/// <returns></returns>
private static byte[] GetKeyArray(string password)
{
if (password == null)
{
password = string.Empty;
}
if (password.Length < 32)
{
password = password.PadRight(32, '0');
}
else if (password.Length > 32)
{
password = password.Substring(0, 32);
}
return _encoding.GetBytes(password);
}
/// <summary>
/// 将字符数组转换成Base64字符串
/// </summary>
/// <param name="inputData"></param>
/// <returns></returns>
private static string ConvertByteToString(byte[] inputData)
{
string strRT = Convert.ToBase64String(inputData);
return strRT;
}
/// <summary>
/// 将Base64字符串转换成字符数组
/// </summary>
/// <param name="inputString"></param>
/// <returns></returns>
private static byte[] ConvertStringToByte(string inputString)
{
if (inputString == null || inputString.Length < 2)
{
throw new ArgumentException();
}
Byte[] toEncryptArray = Convert.FromBase64String(inputString);
return toEncryptArray;
}
#endregion
#region 加密
/// <summary>
/// 加密字节数据
/// </summary>
/// <param name="inputData">要加密的字节数据</param>
/// <param name="password">密码</param>
/// <returns></returns>
public static byte[] Encrypt(byte[] inputData, string password)
{
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
try
{
aes.Key = GetKeyArray(password);
aes.Mode = _cipherMode;
aes.Padding = _paddingMode;
ICryptoTransform transform = aes.CreateEncryptor();
byte[] data = transform.TransformFinalBlock(inputData, 0, inputData.Length);
if (aes != null)
{
aes.Clear();
aes = null;
}
return data;
}
catch (Exception err)
{
throw err;
}
finally
{
if (aes != null)
{
aes.Clear();
aes = null;
}
}
}
/// <summary>
/// 加密字符串(加密为Base64进制字符串)
/// </summary>
/// <param name="inputString">要加密的字符串</param>
/// <param name="password">密码</param>
/// <returns></returns>
public static string Encrypt(string inputString, string password)
{
try
{
byte[] toEncryptArray = _encoding.GetBytes(inputString);
byte[] result = Encrypt(toEncryptArray, password);
return ConvertByteToString(result);
}
catch (Exception err)
{
throw err;
}
}
/// <summary>
/// 字符串加密(加密为Base64进制字符串)
/// </summary>
/// <param name="inputString">需要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string EncryptString(string inputString)
{
return Encrypt(inputString, _passwd);
}
#endregion
#region 解密
/// <summary>
/// 解密字节数组
/// </summary>
/// <param name="inputData">要解密的字节数据</param>
/// <param name="password">密码</param>
/// <returns></returns>
public static byte[] Decrypt(byte[] inputData, string password)
{
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
aes.Key = GetKeyArray(password);
aes.Mode = _cipherMode;
aes.Padding = _paddingMode;
ICryptoTransform transform = aes.CreateDecryptor();
byte[] data = null;
try
{
data = transform.TransformFinalBlock(inputData, 0, inputData.Length);
if (aes != null)
{
aes.Clear();
aes = null;
}
return data;
}
catch (Exception err)
{
throw err;
}
finally
{
if (aes != null)
{
aes.Clear();
aes = null;
}
}
}
/// <summary>
/// 解密Base64进制的字符串为字符串
/// </summary>
/// <param name="inputString">要解密的字符串</param>
/// <param name="password">密码</param>
/// <returns>字符串</returns>
public static string Decrypt(string inputString, string password)
{
try
{
if (string.IsNullOrEmpty(inputString)) return inputString;
byte[] toDecryptArray = ConvertStringToByte(inputString);
string decryptString = _encoding.GetString(Decrypt(toDecryptArray, password));
return decryptString;
}
catch (Exception err)
{
throw err;
}
}
/// <summary>
/// 解密Base64进制的字符串为字符串
/// </summary>
/// <param name="inputString">需要解密的字符串</param>
/// <returns>解密后的字符串</returns>
public static string DecryptString(string inputString)
{
return Decrypt(inputString, _passwd);
}
#endregion
}//end class
}
标签:
AES对称加密解密类 


上一条:
下一条:
相关评论
发表评论