C# 自製字串文字AES加密/解密 類別

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;
        }
    }

 

 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *