首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CSharp中字符串加密和解密(AES)

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

作者头像
码客说
发布2023-11-23 10:48:23
发布2023-11-23 10:48:23
4130
举报
文章被收录于专栏:码客码客

工具类

代码语言: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;
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工具类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档