一、AES說明
高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。它要求區塊大小必須為128位,而金鑰長度則可以為128、196、256位。
注:AES中祕鑰的長度不正確(不為128位等),則丟擲異常。
在.NET Core中對於對稱加密統一介面不再利用不同類而實現,對於非對稱加密當然和對稱加密介面就不同了,建立起來格外方便,不再是例項化對應的類,
//對稱加密
var aes = Aes.Create();
var tripleDES = TripleDES.Create(); //非對稱加密
var rsa = RSA.Create();
二、加密程式碼整理
#region AES加密解密
/// <summary>
/// 128位處理key
/// </summary>
/// <param name="keyArray">原位元組</param>
/// <param name="key">處理key</param>
/// <returns></returns>
private static byte[] GetAesKey(byte[] keyArray, string key)
{
byte[] newArray = new byte[];
if (keyArray.Length < )
{
for (int i = ; i < newArray.Length; i++)
{
if (i >= keyArray.Length)
{
newArray[i] = ;
}
else
{
newArray[i] = keyArray[i];
}
}
}
return newArray;
}
/// <summary>
/// 使用AES加密字串,按128位處理key
/// </summary>
/// <param name="content">加密內容</param>
/// <param name="key">祕鑰,需要128位、256位.....</param>
/// <returns>Base64字串結果</returns>
public static string AesEncrypt(string content, string key, bool autoHandle = true)
{
byte[] keyArray = Encoding.UTF8.GetBytes(key);
if (autoHandle)
{
keyArray = GetAesKey(keyArray, key);
}
byte[] toEncryptArray = Encoding.UTF8.GetBytes(content); SymmetricAlgorithm des = Aes.Create();
des.Key = keyArray;
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = des.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, , toEncryptArray.Length);
return Convert.ToBase64String(resultArray);
}
/// <summary>
/// 使用AES解密字串,按128位處理key
/// </summary>
/// <param name="content">內容</param>
/// <param name="key">祕鑰,需要128位、256位.....</param>
/// <returns>UTF8解密結果</returns>
public static string AesDecrypt(string content, string key, bool autoHandle = true)
{
byte[] keyArray = Encoding.UTF8.GetBytes(key);
if (autoHandle)
{
keyArray = GetAesKey(keyArray, key);
}
byte[] toEncryptArray = Convert.FromBase64String(content); SymmetricAlgorithm des = Aes.Create();
des.Key = keyArray;
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = des.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, , toEncryptArray.Length); return Encoding.UTF8.GetString(resultArray);
}
#endregion
使用示例:
string key = "";
string result1 = SecurityHelper.AesEncrypt("張三丰", key);
Console.WriteLine(result1); //o7TgaEbkrWOzUMOPdnrh8Q== string result2 = SecurityHelper.AesDecrypt(result1, key);
Console.WriteLine(result2); //張三丰
更多:
.Net Core HTML解析利器之HtmlAgilityPack