• c# aes加密解密私钥公钥通钥


    using System.Security.Cryptography;
    using System.Text;

    namespace EncryptTest
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello, World!");

               
                string 密= EncryptAESBASE64("你第三方第三方斯蒂芬 手打几号放假啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 ****---#¥%…………&*(好", "666");
                Console.WriteLine(密);

                string 明文= DecryptAESBASE64(密, "666");
                Console.WriteLine(明文);

                明文 = DecryptAESBASE64(密, "私人的KEY_NAME");//公钥读取
                Console.WriteLine(明文);
            }
            public static byte[] CalculateMD5(string input)
            {
                MD5 md5 = MD5.Create();
                byte[] inputBytes = Encoding.UTF8.GetBytes(input);
                return md5.ComputeHash(inputBytes);
            }

            private static Dictionary? keys=new Dictionary();

            public static void AddKey(string keyName, byte[] key)
            {
                if (!keys.ContainsKey(keyName))
                {
                    keys.Add(keyName, key);
                }
            }

            public static string EncryptAESBASE64(string clearText, string keyName)
            {
                AddKey("私人的KEY_NAME", CalculateMD5(keyName));
                if (!keys.ContainsKey(keyName))
                {
                    //添加
                    byte[] md5 = CalculateMD5(keyName);
                    AddKey(keyName, md5);
                }

                //解密的时候,不能随便让用户添加
                if (keys.ContainsKey(keyName))
                {
                    byte[] key = keys[keyName];
                    using (Aes encryptor = Aes.Create())
                    {
                        encryptor.Key = key;
                        encryptor.IV = new byte[16]; // Use proper IV generation
                        encryptor.Padding = PaddingMode.PKCS7; // Set padding mode

                        using (MemoryStream ms = new MemoryStream())
                        {
                            using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                            {
                                byte[] clearBytes = Encoding.UTF8.GetBytes(clearText);
                                cs.Write(clearBytes, 0, clearBytes.Length);
                            }
                            return Convert.ToBase64String(ms.ToArray());
                        }
                    }
                }
                else
                {
                    return "读取失败502";
                }
            }

            public static string DecryptAESBASE64(string encryptedText, string keyName)
            {
                AddKey("私人的KEY_NAME", CalculateMD5(keyName));
                if (keys.ContainsKey(keyName))
                {
                    byte[] key = keys[keyName];
                    byte[] cipherBytes = Convert.FromBase64String(encryptedText);

                    using (Aes encryptor = Aes.Create())
                    {
                        encryptor.Key = key;
                        encryptor.IV = new byte[16]; // Use proper IV generation
                        encryptor.Padding = PaddingMode.PKCS7; // Set padding mode

                        using (MemoryStream ms = new MemoryStream())
                        {
                            using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                            {
                                cs.Write(cipherBytes, 0, cipherBytes.Length);
                            }
                            return Encoding.UTF8.GetString(ms.ToArray());
                        }
                    }
                }
                else
                {
                    throw new ArgumentException("Key not found", nameof(keyName));
                }
            }

        }
    }
     

    点评:

    这个代码需要提前添加       keys。

    private static Dictionary? keys=new Dictionary();

  • 相关阅读:
    VTK四面体文件格式
    goland快捷键
    python爬虫-某政府网站加速乐(简单版)实例小记
    nerdctl 工具(用于 containerd 但兼容 docker CLI 习惯)
    洛谷P5903 树上k级祖先 长链剖分
    使用全局配置处理字段名和属性名不一致的情况
    概率统计·样本及抽样分布【随机样本、抽样分布】
    Makefile
    docker容器化部署nginx php项目(步骤清晰简洁)
    Biotin-NHS ester,生物素-NHS,35013-72-0
  • 原文地址:https://blog.csdn.net/ccagy/article/details/136338979