//************************************************************************
// author: yuzhengyang
// date: 2018.3.27 - 2018.6.3
// desc: Aes 加密解密工具
// Copyright (c) yuzhengyang. All rights reserved.
//************************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Azylee.Core.DataUtils.EncryptUtils
{
public class AesTool
{
private static int AESKeyLength = 32;//AES加密的密码为32位
private static char AESFillChar = 'Y';//AES密码填充字符
public static string DefaultPassword = "yuzhengyang";//默认密码
///
/// 加密
///
/// 要加密的 string 字符串
///
///
public static string Encrypt(string str, string key)
{
key = FmtPassword(key);
byte[] keyArray = Encoding.UTF8.GetBytes(key);
byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
///
/// 加密
///
/// 要加密的 byte[] 数组
///
///
public static byte[] Encrypt(byte[] array, string key)
{
key = FmtPassword(key);
byte[] keyArray = Encoding.UTF8.GetBytes(key);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(array, 0, array.Length);
return resultArray;
}
///
/// 解密
///
/// 要解密的 string 字符串
///
///
public static string Decrypt(string str, string key)
{
key = FmtPassword(key);
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
byte[] toEncryptArray = Convert.FromBase64String(str);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return UTF8Encoding.UTF8.GetString(resultArray);
}
///
/// 解密
///
/// 要解密的 byte[] 数组
///
///
public static byte[] Decrypt(byte[] array, string key)
{
key = FmtPassword(key);
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(array, 0, array.Length);
return resultArray;
}
///
/// 格式化密码
///
/// 要格式化的密码
///
public static string FmtPassword(string s)
{
string password = s ?? "";
//格式化密码
if (password.Length < AESKeyLength)
{
//补足不够长的密码
password = password + new string(AESFillChar, AESKeyLength - password.Length);
}
else if (password.Length > AESKeyLength)
{
//截取过长的密码
password = password.Substring(0, AESKeyLength);
}
return password;
}
}
}