1. 首页>
  2. 技术文章>
  3. .net实现mysql的AES_ENCRYPT和AES_DECRYPT

.net实现mysql的AES_ENCRYPT和AES_DECRYPT

4/23/21 11:18:22 AM 浏览 1804 评论 0

AES_ENCRYPT AES_DECRYPT

.net实现mysql的AES_ENCRYPT和AES_DECRYPT

  public static byte[] AESCreateKey(byte[] key, int keyLength)
        {
            byte[] realkey = new byte[keyLength];

            for (int i = 0; i < key.Length; i++)
            {
                realkey[i % keyLength] ^= key[i];
            }

            return realkey;
        }


        #region AESEncrypt(AES加密算法)
        /// <summary>
        /// AES加密算法
        /// </summary>
        /// <param name="plainText">明文字符串</param>
        /// <param name="strKey">密钥</param>
        /// <returns>返回加密后的密文字节数组</returns>
        public static string AESEncrypt(string plainText, string strKey)
        {
            MemoryStream mStream = new MemoryStream();
            AesManaged aes = new AesManaged();
            byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);

            Byte[] bKey = Encoding.ASCII.GetBytes(strKey);

            aes.Mode = CipherMode.ECB;
            aes.Padding = PaddingMode.PKCS7;
            aes.KeySize = 128;
            aes.Key = AESCreateKey(bKey, aes.KeySize / 8);

            CryptoStream cryptoStream = new CryptoStream(mStream, aes.CreateEncryptor(), CryptoStreamMode.Write);

            try
            {
                cryptoStream.Write(plainBytes, 0, plainBytes.Length);
                cryptoStream.FlushFinalBlock();
                return Convert.ToBase64String(mStream.ToArray());
            }
            finally
            {
                cryptoStream.Close();
                mStream.Close();
                aes.Clear();
            }

        }
        #endregion

        #region AESDecrypt(AES解密)
        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="strCipherText">密文字符串</param>
        /// <param name="strKey">密钥</param>
        /// <returns>返回解密后的字符串</returns>
        public static string AESDecrypt(string strCipherText, string strKey)
        {
            Byte[] encryptedBytes = Convert.FromBase64String(strCipherText);

            Byte[] bKey = Encoding.ASCII.GetBytes(strKey);

            MemoryStream mStream = new MemoryStream(encryptedBytes);

            AesManaged aes = new AesManaged();
            aes.Mode = CipherMode.ECB;
            aes.Padding = PaddingMode.PKCS7;
            aes.KeySize = 128;
            aes.Key = AESCreateKey(bKey, aes.KeySize / 8);

            CryptoStream cryptoStream = new CryptoStream(mStream, aes.CreateDecryptor(), CryptoStreamMode.Read);
            try
            {
                byte[] tmp = new byte[encryptedBytes.Length + 32];
                int len = cryptoStream.Read(tmp, 0, encryptedBytes.Length + 32);
                byte[] ret = new byte[len];
                Array.Copy(tmp, 0, ret, 0, len);
                return Encoding.UTF8.GetString(ret);
            }
            finally
            {
                cryptoStream.Close();
                mStream.Close();
                aes.Clear();
            }

        }
        #endregion


网友讨论