CSharp中字符串加密和解密(AES)

2023-11-23 10:48:23 浏览数 (1)

工具类

代码语言:javascript复制
namespace Z.Utils.Common
{
    using System;
    using System.Security.Cryptography;
    using System.Text;

    /// <summary>
    /// AES加密 
    /// </summary>
    public class AesHelper
    {
        public static string QrcodeLoginKey = "qazwsxedcrfvtgby";

        /// <summary>
        /// AES 加密
        /// </summary>
        /// <returns>
        /// Encrypted 16 hex string
        /// </returns>
        public static string AesEncrypt(string data, string key = "")
        {
            if (string.IsNullOrWhiteSpace(key))
            {
                key = QrcodeLoginKey.PadRight(16, '0');
            }

            // 256-AES key
            byte[] keyArray = Encoding.UTF8.GetBytes(key);
            byte[] toEncryptArray = Encoding.UTF8.GetBytes(data);
            RijndaelManaged rDel = new RijndaelManaged
            {
                Key = keyArray,
                Mode = CipherMode.ECB,
                Padding = PaddingMode.PKCS7
            };
            ICryptoTransform cTransform = rDel.CreateEncryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(
                toEncryptArray,
                0,
                toEncryptArray.Length
            );
            return BytesToHexString(resultArray);
        }

        /// <summary>
        /// AES 解密
        /// </summary>
        /// <param name="hexString">
        /// Encrypted 16 hex string
        /// </param>
        /// <param name="key"></param>
        /// <returns>
        /// Decrypted string
        /// </returns>
        public static string AesDecrypt(string hexString, string key = "")
        {
            if (string.IsNullOrWhiteSpace(key))
            {
                key = QrcodeLoginKey.PadRight(16, '0');
            }

            // 256-AES key
            byte[] keyArray = Encoding.UTF8.GetBytes(key);
            byte[] toEncryptArray = HexStringToBytes(hexString);
            RijndaelManaged rDel = new RijndaelManaged
            {
                Key = keyArray,
                Mode = CipherMode.ECB,
                Padding = PaddingMode.PKCS7
            };
            ICryptoTransform cTransform = rDel.CreateDecryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(
                toEncryptArray,
                0,
                toEncryptArray.Length
            );
            return Encoding.UTF8.GetString(resultArray);
        }

        /// <summary>
        /// Byte array to convert 16 hex string
        /// </summary>
        /// <param name="bytes">
        /// byte array
        /// </param>
        /// <returns>
        /// 16 hex string
        /// </returns>
        public static string BytesToHexString(byte[] bytes)
        {
            StringBuilder returnStr = new StringBuilder();
            if (bytes == null)
            {
                return returnStr.ToString();
            }
            foreach (byte t in bytes)
            {
                returnStr.Append(t.ToString("X2"));
            }
            return returnStr.ToString();
        }

        /// <summary>
        /// 16 hex string converted to byte array
        /// </summary>
        /// <param name="hexString">
        /// 16 hex string
        /// </param>
        /// <returns>
        /// byte array
        /// </returns>
        public static byte[] HexStringToBytes(string hexString)
        {
            if (hexString == null || hexString.Equals(""))
            {
                return null;
            }
            int length = hexString.Length / 2;
            if (hexString.Length % 2 != 0)
            {
                return null;
            }
            byte[] d = new byte[length];
            for (int i = 0; i < length; i  )
            {
                d[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            }
            return d;
        }
    }
}

0 人点赞