主要用于我们使用TCP传输内容时 我们需要对传输的内容进行加密传输
下面的参数str就是tcp需要传输的内容
密钥就是加密和解密需要提供一组相同的字符
加密模式
填充方式
/// <summary>
/// 将目标字符串进行AES加密
/// IV和Key均为secretKey
/// </summary>
/// <param name="str">被加密字符串</param>
/// <param name="secretKey">秘钥</param>
/// <param name="mode">加密模式</param>
/// <param name="padding">填充方式</param>
/// <returns></returns>
public static string ToEncryptAes(this string str, string secretKey, CipherMode mode, PaddingMode padding)
{
if (str.IsNullOrWhiteSpace()) return null;
var toEncryptArray = Encoding.UTF8.GetBytes(str);
IV = "1954682168745975";//IV是偏移量
var rm = new RijndaelManaged
{
IV = IV ,
Key = Encoding.UTF8.GetBytes(secretKey),
Mode = mode,
Padding = padding
};
//如果对加密方式和上面的参数值不了解 可以查看下面的解密方法 得出参数定义形式
var cTransform = rm.CreateEncryptor();
var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
#region AES 解密
/// <summary>
/// AES 解密
/// </summary>
/// <param name="str">明文(待解密)</param>
/// <param name="key">密文</param>
/// <returns></returns>
public static string AesDecrypt(string str, string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Convert.FromBase64String(str);
RijndaelManaged rm = new RijndaelManaged
{
Key = Encoding.UTF8.GetBytes(key),
//偏移量
IV = Encoding.UTF8.GetBytes("1954682168745975"),
Mode = CipherMode.CBC,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
#endregion