using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace VRS.Util
{
public static class AESHelper
{
///
/// AES 加密
///
/// 待加密的字符串
/// 密文
///
public static string AesEncrypt(string str, string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
RijndaelManaged rm = new RijndaelManaged
{
Key = Encoding.UTF8.GetBytes(key),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return BitConverter.ToString(resultArray).Replace("-", "");
}
///
/// 校内密码加密
///
///
///
public static string EncryptPassword(string plainText)
{
// AES 密钥(必须是 16、24 或 32 字节)
var key = Encoding.UTF8.GetBytes("kGBxaThxMCMGaysp");
// 初始化向量 IV(必须是 16 字节)
var iv = Encoding.UTF8.GetBytes("VXFxgTgcvSDEXHpC");
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = key;
aesAlg.IV = iv;
aesAlg.Mode = CipherMode.CBC;
aesAlg.Padding = PaddingMode.PKCS7;
// 创建加密器对象
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
// 写入加密后的数据到内存流中
swEncrypt.Write(plainText);
}
}
// 返回加密后的数据的 Base64 字符串
return Convert.ToBase64String(msEncrypt.ToArray());
}
}
}
///
/// AES 解密
///
/// 待解密的字符串
/// 密文
///
public static string AesDecrypt(string content, string key)
{
if (string.IsNullOrEmpty(content)) return null;
Byte[] toEncryptArray = ConvertToByteArray(content);
RijndaelManaged rm = new RijndaelManaged
{
Key = Encoding.UTF8.GetBytes(key),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
///
/// hex字符串转为byte[]数组
///
/// hex字符串
///
private static byte[] ConvertToByteArray(string hexString)
{
int length = hexString.Length / 2;
byte[] bytes = new byte[length];
for (int i = 0; i < length; ++i)
{
bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
return bytes;
}
}
}