using System;
using System.Security.Cryptography;
using System.Text;
namespace Common
{
public class AesHelper
{
public static string QrcodeLoginKey = "zyyxhlywkdatakey";
///
/// AES 加密
///
///
///
/// Encrypted 16 hex string
public static string AesEncrypt(string data, string key = "")
{
if (string.IsNullOrWhiteSpace(key))
{
key = QrcodeLoginKey.PadRight(16, '0');
}
// 256-AES key
byte[] keyArray = Encoding.ASCII.GetBytes(key);
byte[] toEncryptArray = Encoding.ASCII.GetBytes(data);
RijndaelManaged rDel = new RijndaelManaged
{
Key = keyArray,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0,
toEncryptArray.Length);
return BytesToHexString(resultArray);
}
///
/// AES 解密
///
/// Encrypted 16 hex string
///
/// Decrypted string
public static string AesDecrypt(string hexString, string key = "")
{
if (string.IsNullOrWhiteSpace(key))
{
key = QrcodeLoginKey.PadRight(16, '0');
}
// 256-AES key
byte[] keyArray = Encoding.ASCII.GetBytes(key);
byte[] toEncryptArray = HexStringToBytes(hexString);
RijndaelManaged rDel = new RijndaelManaged
{
Key = keyArray,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0,
toEncryptArray.Length);
return Encoding.ASCII.GetString(resultArray);
}
///
/// Byte array to convert 16 hex string
///
/// byte array
/// 16 hex string
public static string BytesToHexString(byte[] bytes)
{
StringBuilder returnStr = new StringBuilder();
if (bytes != null)
{
foreach (var t in bytes)
{
returnStr.Append(t.ToString("X2"));
}
}
return returnStr.ToString();
}
///
/// 16 hex string converted to byte array
///
/// 16 hex string
/// byte array
public static byte[] HexStringToBytes(string hexString)
{
if (hexString == null || hexString.Equals(""))
{
return null;
}
int length = hexString.Length / 2;
if (hexString.Length % 2 != 0)
{
return null;
}
byte[] d = new byte[length];
for (int i = 0; i < length; i++)
{
d[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
return d;
}
}
}