使用 AES 演算法為字串加密解密
轉載來源
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
using System.IO;
namespace StringEncrypt
{
public static class StringEncrypt
{
/// <summary>
/// 字串加密(非對稱式)
/// </summary>
/// <param name="Source">加密前字串</param>
/// <param name="CryptoKey">加密金鑰</param>
/// <returns>加密後字串</returns>
public static string aesEncryptBase64(string SourceStr, string CryptoKey)
{
string encrypt = "";
try
{
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider();
byte[] key = sha256.ComputeHash(Encoding.UTF8.GetBytes(CryptoKey));
byte[] iv = md5.ComputeHash(Encoding.UTF8.GetBytes(CryptoKey));
aes.Key = key;
aes.IV = iv;
byte[] dataByteArray = Encoding.UTF8.GetBytes(SourceStr);
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, 0, dataByteArray.Length);
cs.FlushFinalBlock();
encrypt = Convert.ToBase64String(ms.ToArray());
}
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
return encrypt;
}
/// <summary>
/// 字串解密(非對稱式)
/// </summary>
/// <param name="Source">解密前字串</param>
/// <param name="CryptoKey">解密金鑰</param>
/// <returns>解密後字串</returns>
public static string aesDecryptBase64(string SourceStr, string CryptoKey)
{
string decrypt = "";
try
{
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider();
byte[] key = sha256.ComputeHash(Encoding.UTF8.GetBytes(CryptoKey));
byte[] iv = md5.ComputeHash(Encoding.UTF8.GetBytes(CryptoKey));
aes.Key = key;
aes.IV = iv;
byte[] dataByteArray = Convert.FromBase64String(SourceStr);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, 0, dataByteArray.Length);
cs.FlushFinalBlock();
decrypt = Encoding.UTF8.GetString(ms.ToArray());
}
}
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
return decrypt;
}
}
}