using System;
using System.Security.Cryptography;
using System.Text;
namespace Common
{
public static class Encrypt
{
private static readonly string AESKey = "123qweasd";//必须16字节
private static readonly string MD5Salt = "aassdd";//MD5 加盐
#region RES 加密 解密
/// <summary>
/// AES 加密
/// </summary>
/// <param name="value"></param>
/// <param name="key"></param>
/// <returns>返回的加密字符串长度不固定</returns>
public static string AESEncrypt(string value, string key = null)
{
if (string.IsNullOrEmpty(key))
{
key = AESKey;
}
byte[] keyArray = GetByte_16(key);
byte[] toEncryptArray = Encoding.UTF8.GetBytes(value);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cryptoTransform = rDel.CreateEncryptor();
byte[] resultArray = cryptoTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
/// <summary>
/// AES 解密
/// </summary>
/// <param name="value"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string AESDecrypt(string value, string key = null)
{
try
{
if (string.IsNullOrEmpty(key))
{
key = AESKey;
}
byte[] keyArray = GetByte_16(key);
byte[] toEncryptArray = Convert.FromBase64String(value);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cryptoTransform = rDel.CreateDecryptor();
byte[] resultArray = cryptoTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
catch
{
return string.Empty;
}
}
/// <summary>
/// 返回16个字节的数组
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
private static byte[] GetByte_16(string key)
{
byte[] keyArray = Encoding.UTF8.GetBytes(key);
byte[] resArray = new byte[16];
for (int i = 0; i < resArray.Length; i++)
{
if (i > keyArray.Length - 1)
{
resArray[i] = Convert.ToByte('$');
}
else
{
resArray[i] = keyArray[i];
}
}
return resArray;
}
#endregion
#region MD5 加密
/// <summary>
/// MD5 加密
/// </summary>
/// <param name="str"></param>
/// <param name="salt"></param>
/// <returns>返回长度为32的字符串</returns>
public static string GetMD5(string str, string salt = null)
{
if (string.IsNullOrEmpty(salt))
{
salt = MD5Salt;
}
byte[] buf = Encoding.UTF8.GetBytes(salt + str);
byte[] md5Buf;
using (MD5 md5 = MD5.Create())
{
md5Buf = md5.ComputeHash(buf);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < md5Buf.Length; i++)
{
sb.Append(md5Buf[i].ToString("x2"));
}
return sb.ToString();
}
#endregion
}
}
C# 加密解密
最新推荐文章于 2024-06-08 15:14:11 发布