AES加解密(RijndaelManaged版)
AES在线加解密测试:https://the-x.cn/cryptography/Aes.aspx
RijndaelManaged方法不需要安装第三方库,框架貌似有自带方法!!直接使用即可~~
key值要求是16个字节,我代码中做了长度补偿。
AES.cs文件代码如下
using System;
using System.Security.Cryptography;
using System.Text;
namespace ConsoleApp1
{
/// <summary>
/// AES加密,高级加密法
/// </summary>
public static class AES
{
/// <summary>
/// AES加密
/// </summary>
/// <param name="key">加密秘钥</param>
/// <param name="value">加密数据</param>
/// <returns></returns>
public static string Encrypt(string key, string value)
{
if (string.IsNullOrEmpty(value)) return null;
Byte[] toEncryptArray = Encoding.UTF8.GetBytes(value);
byte[] tempKey = new byte[16];
byte[] temp = Encoding.UTF8.GetBytes(key);
Array.ConstrainedCopy(temp, 0, tempKey, 0, temp.Length);
RijndaelManaged rm = new RijndaelManaged
{
Mode = CipherMode.ECB,
Padding = PaddingMode.Zeros,
KeySize = 128,
Key = tempKey
};
ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(Encoding.UTF8.GetBytes(Convert.ToBase64String(resultArray, 0, resultArray.Length)));
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="key">解密秘钥</param>
/// <param name="value">解密数据</param>
/// <returns></returns>
public static string Decrypt(string key, string value)
{
if (string.IsNullOrEmpty(value)) return null;
Byte[] toEncryptArray = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(value)));
byte[] tempKey = new byte[16];
byte[] temp = Encoding.UTF8.GetBytes(key);
Array.ConstrainedCopy(temp, 0, tempKey, 0, temp.Length);
RijndaelManaged rm = new RijndaelManaged
{
Mode = CipherMode.ECB,
Padding = PaddingMode.Zeros,
KeySize = 128,
Key = tempKey
};
ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="key">解密秘钥</param>
/// <param name="value">解密数据</param>
/// <returns></returns>
public static string Decrypt(string key, byte[] value)
{
if (value == null || value.Length == 0)
return null;
byte[] tempKey = new byte[16];
byte[] temp = Encoding.UTF8.GetBytes(key);
Array.ConstrainedCopy(temp, 0, tempKey, 0, temp.Length);
RijndaelManaged rm = new RijndaelManaged
{
Mode = CipherMode.ECB,
Padding = PaddingMode.Zeros,
KeySize = 128,
Key = tempKey
};
ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(value, 0, value.Length);
return Encoding.UTF8.GetString(resultArray);
}
}
}
使用方法:
using System;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string key = "123@abcd";
string data = "加密解密测试123ABC";
// 加密
string ret1 = AES.Encrypt(key, data);
// 解密
string ret2 = AES.Decrypt(key, ret1);
Console.WriteLine(ret2);
Console.Read();
}
}
}