search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

C# AES加解密 – jashliao部落格

C# AES加解密

 

資料來源:http://joyceevent.blogspot.tw/2015/09/c-javascript-aes.html

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace CS_Console_AES
{
    class Program
    {
        //解密資料
        public static string DecryptStringAES(string cipherText)
        {
            var keybytes = Encoding.UTF8.GetBytes(“8080808080808080”);   //自行設定,但要與JavaScript端 一致
            var iv = Encoding.UTF8.GetBytes(“8080808080808080”); // 自行設定,但要與JavaScript端 一致
            var encrypted = Convert.FromBase64String(cipherText);
            var decriptedFromJavascript = DecryptStringFromBytes(encrypted, keybytes, iv);
            return string.Format(decriptedFromJavascript);
        }

        private static 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 static string EncryptStringAES(string cipherText)
        {
            var keybytes = Encoding.UTF8.GetBytes(“8080808080808080”);   //自行設定
            var iv = Encoding.UTF8.GetBytes(“8080808080808080”);         //自行設定
            var EncryptString = EncryptStringToBytes(cipherText, keybytes, iv);

            var str = BitConverter.ToString(EncryptString).Replace(“-“, string.Empty).ToLower();
            Console.WriteLine(“Hex=” + str+”\n”);

            return Convert.ToBase64String(EncryptString);
        }
        private static 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;
        }
        static void Pause()
        {
            Console.Write(“Press any key to continue . . . “);
            Console.ReadKey(true);
        }
        static void Main(string[] args)
        {
            String Data = EncryptStringAES(“HELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLO”);
            Console.WriteLine(Data+”\n”);
            Console.WriteLine(DecryptStringAES(Data)+”\n”);
            //驗證比對網頁:http://www.seacha.com/tools/aes.html
            Pause();
        }
    }
}

 

 

 

 

 



熱門推薦

本文由 jashliaoeuwordpress 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦