zoukankan      html  css  js  c++  java
  • C# 实现 AES 加密算法

    开篇日常立个flag....

    代码

    命名空间 System.Security.Cryptography

    public enum enmKeyBit
    {
        KeyBit128 = 128,
        KeyBit192 = 192,
        KeyBit256 = 256,
    }
    
    public class EncryptNew
    {
        /// <summary>
        /// AES ECB模式 加密
        /// </summary>
        /// <param name="data">明文</param>
        /// <param name="key">密钥</param>
        /// <param name="keyBit">密钥位数</param>
        /// <returns></returns>
        public static string AESEncrypt(String data, String key, enmKeyBit keyBit = enmKeyBit.KeyBit256)
        {
            if (string.IsNullOrEmpty(data))
            {
                return string.Empty;
            }
    
            try
            {
                int intKeyBit = (int)keyBit;
                RijndaelManaged aes = new RijndaelManaged();
                byte[] bytsData = Encoding.UTF8.GetBytes(data);
                byte[] bytsKey = new Byte[intKeyBit / 8];
                Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bytsKey.Length)), bytsKey, bytsKey.Length);
    
                aes.Mode = CipherMode.ECB;
                aes.Padding = PaddingMode.PKCS7;
                aes.KeySize = intKeyBit;
                aes.Key = bytsKey;
                //aes.IV = iv;
                ICryptoTransform ctf = aes.CreateEncryptor();
                byte[] bytsResult = ctf.TransformFinalBlock(bytsData, 0, bytsData.Length);
    
                return Convert.ToBase64String(bytsResult);
            }
            catch
            {
                return string.Empty;
            }
        }
    
        /// <summary>
        /// AES ECB模式 解密
        /// </summary>
        /// <param name="data">密文</param>
        /// <param name="key">密钥</param>
        /// <param name="keyBit">密钥位数</param>
        /// <returns></returns>
        public static string AESDecrypt(String data, String key, enmKeyBit keyBit = enmKeyBit.KeyBit256)
        {
            if (string.IsNullOrEmpty(data))
            {
                return string.Empty;
            }
    
            try
            {
                int intKeyBit = (int)keyBit;
                RijndaelManaged aes = new RijndaelManaged();
                byte[] bytsData = Convert.FromBase64String(data);
                byte[] bytsKey = new Byte[intKeyBit / 8];
                Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bytsKey.Length)), bytsKey, bytsKey.Length);
    
                aes.Mode = CipherMode.ECB;
                aes.Padding = PaddingMode.PKCS7;
                aes.KeySize = intKeyBit;
                aes.Key = bytsKey;
                //aes.IV = iv;
    
                ICryptoTransform ctf = aes.CreateDecryptor();
                byte[] bytsResult = ctf.TransformFinalBlock(bytsData, 0, bytsData.Length);
    
                return UTF8Encoding.UTF8.GetString(bytsResult);
            }
            catch
            {
                return string.Empty;
            }
        }
    }
    

      

  • 相关阅读:
    vs2015 打开xaml:右击-打开方式->xml编辑器
    交互式计算机图形学(基于webGL)资源使用
    利用pushState开发无刷页面切换
    js 阻止冒泡 stopPropagation
    PHP中“简单工厂模式”实例讲解
    ajax传递特殊字符串问题 +%@
    GitHub自学
    ajax 请求超时 取消请求
    mongo操作之分页
    我使用过的Linux命令之date
  • 原文地址:https://www.cnblogs.com/clis/p/14299981.html
Copyright © 2011-2022 走看看