C# 自製字串文字AES加密/解密 類別
C# 自製字串文字AES加密/解密 類別
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
class String_AES
{
public String m_StrKey;
public String m_StrEncryptOutput;//加密後16進制輸出
public String_AES()
{
m_StrKey = “8X8X8X8X8X8X8X8X”;
m_StrEncryptOutput = “”;
}
//解密資料
public string DecryptStringAES(string cipherText)
{
var keybytes = Encoding.UTF8.GetBytes(m_StrKey); //自行設定,但要與JavaScript端 一致
var iv = Encoding.UTF8.GetBytes(m_StrKey); // 自行設定,但要與JavaScript端 一致
var encrypted = Convert.FromBase64String(cipherText);
var decriptedFromJavascript = DecryptStringFromBytes(encrypted, keybytes, iv);
return string.Format(decriptedFromJavascript);
}
private string DecryptStringFromBytes(byte[] cipherText, byte[] key, byte[] iv)
{
if (cipherText == null || cipherText.Length <= 0)
{
throw new ArgumentNullException(“cipherText”);
}
if (key == null || key.Length <= 0)
{
throw new ArgumentNullException(“key”);
}
if (iv == null || iv.Length <= 0)
{
throw new ArgumentNullException(“key”);
}
string plaintext = null;
using (var rijAlg = new RijndaelManaged())
{
rijAlg.Mode = CipherMode.ECB;
rijAlg.Padding = PaddingMode.PKCS7;
rijAlg.FeedbackSize = 128;
rijAlg.Key = key;
//rijAlg.IV = iv;
var decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);
try
{
using (var msDecrypt = new MemoryStream(cipherText))
{
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (var srDecrypt = new StreamReader(csDecrypt))
{
plaintext = srDecrypt.ReadToEnd();
}
}
}
}
catch
{
plaintext = “keyError”;
}
}
return plaintext;
}
//加密資料
public string EncryptStringAES(string cipherText)
{
var keybytes = Encoding.UTF8.GetBytes(m_StrKey); //自行設定
var iv = Encoding.UTF8.GetBytes(m_StrKey); //自行設定
var EncryptString = EncryptStringToBytes(cipherText, keybytes, iv);
var str = BitConverter.ToString(EncryptString).Replace(“-“, string.Empty).ToLower();
m_StrEncryptOutput = str;
return Convert.ToBase64String(EncryptString);
}
private byte[] EncryptStringToBytes(string plainText, byte[] key, byte[] iv)
{
if (plainText == null || plainText.Length <= 0)
{
throw new ArgumentNullException(“plainText”);
}
if (key == null || key.Length <= 0)
{
throw new ArgumentNullException(“key”);
}
if (iv == null || iv.Length <= 0)
{
throw new ArgumentNullException(“key”);
}
byte[] encrypted;
using (var rijAlg = new RijndaelManaged())
{
rijAlg.Mode = CipherMode.ECB;
rijAlg.Padding = PaddingMode.PKCS7;
rijAlg.FeedbackSize = 128;
rijAlg.Key = key;
//rijAlg.IV = iv;
var encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
using (var msEncrypt = new MemoryStream())
{
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (var swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
}
return encrypted;
}
}