AES-256-CBC 加密解密

 //AES加密/解密
        //在线AES加密解密工具。
        //            AES采用对称分组密码体制,
        //            密钥长度支持为128/192/256bits。
        //            用户密钥长度不足时,平台将以0x00自动填充。
        //            IV也一样,自动填充,超出部分将被忽略。
        //            加密时会将明文数据按16byte进行分组,
        //            不足16byte时将用特定的Padding(如PCKS7)字符进填充,
        //            所以不同的Padding方式密文最后一段可能不一样。
        //            如果没有特别指明平台将使用UTF8编码处理数据(如KEY/IV)。

测试网站
        //https://the-x.cn/cryptography/Aes.aspx

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

namespace AesEncrypt
{
    /// 
    /// Aes扩展方法
    /// 
    public class AesEncryptExtension
    {
        public CipherMode Mode { get; internal set; }
        public PaddingMode Padding { get; internal set; }

        /// 
        /// 加密
        /// 
        /// 被加密的字符串
        /// 对称算法的密钥
        /// 设置对称算法的初始化向量
        /// Base64
        public string Encrypt(string Text, byte[] aesKey, byte[] aesIV)
        {
            byte[] encrypted;
            encrypted = EncryptStringToBytes_Aes(Text, aesKey, aesIV);
            return Convert.ToBase64String(encrypted);
        }
        private byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
        {
            // Check arguments.
            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("IV");
            }
            byte[] encrypted;
            // Create an Aes object
            // with the specified key and IV.
           // using (RijndaelManaged aesAlg = new RijndaelManaged())

          using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;
                //設定 cipher 格式 AES-256-CBC
                //aesAlg.BlockSize = 256;
                //aesAlg.KeySize = 128;
                //aesAlg.FeedbackSize = 128;
                aesAlg.Padding = PaddingMode.PKCS7;
                aesAlg.Mode = CipherMode.CBC;

                //aesAlg.Key = (new SHA256Managed()).ComputeHash(Encoding.ASCII.GetBytes("IHazSekretKey"));
                //aesAlg.IV = System.Text.Encoding.ASCII.GetBytes("1234567890123456");
                // Create a decrytor to perform the stream transform.
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

                // Create the streams used for encryption.
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        //csEncrypt.FlushFinalBlock();
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {

                            //Write all data to the stream.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }
            // Return the encrypted bytes from the memory stream.
            return encrypted;
        }


        /// 
        /// 解密
        /// 
        /// 被Aes加密后的Base64
        /// 对称算法的密钥
        /// 设置对称算法的初始化向量
        /// 字符串
        public string Decrypt(string text, byte[] aesKey, byte[] aesIV)
        {
            string roundtrip;

            byte[] myByte = Convert.FromBase64String(text);
            roundtrip = DecryptStringFromBytes_Aes(myByte, aesKey, aesIV);

            return roundtrip;
        }
        private string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
        {
            // Check arguments.
            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("IV");
            }
            // Declare the string used to hold
            // the decrypted text.
            string plaintext;

            // Create an Aes object
            // with the specified key and IV.
            using (Aes aesAlg = Aes.Create())
            {
                aesAlg.Key = Key;
                aesAlg.IV = IV;

                // Create a decrytor to perform the stream transform.
                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

                // Create the streams used for decryption.
                using (MemoryStream msDecrypt = new MemoryStream(cipherText))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                        {
                            // Read the decrypted bytes from the decrypting stream
                            // and place them in a string.
                            plaintext = srDecrypt.ReadToEnd();
                        }
                    }
                }
            }
            return plaintext;
        }

    }
}

你可能感兴趣的:(C#,html5,big,data)