当前位置: 首页 > news >正文

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<string, byte[]>? keys=new Dictionary<string, byte[]>();

        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<string, byte[]>? keys=new Dictionary<string, byte[]>();

http://www.lryc.cn/news/307978.html

相关文章:

  • 上拉电阻与下拉电阻、电容的作用
  • 《Spring Security 简易速速上手小册》第1章 Spring Security 概述(2024 最新版)
  • vue页面菜单权限问题解决
  • C++面试宝典第33题:数组组成最大数
  • “影像承载初心” 国际数字影像产业园2024首届摄影沙龙诚邀您的参与!
  • 【C语言】while循环语句
  • 2024数字中国创新大赛·数据要素赛道“能源大数据应用赛”正式上线!参赛指南请查收
  • react-JSX基本使用
  • 学习阶段单片机买esp32还是stm32?
  • 【Simulink系列】——Simulink子系统子系统封装模块库技术
  • 一加手机线刷2024版,param预载失败/MSM刷机工具报错
  • 文件拖放到窗体事件
  • JAVA集成微信支付V3版JSAPI下单
  • opengles 背面剔除介绍(十二)
  • 【深度学习:视频注释】如何为机器学习自动执行视频注释
  • 网络编程、UDP、TCP
  • Maya笔记 设置工作目录
  • MySQL:连接查询
  • 歌尔气压计SPA06-003在无人机和手表上的创新应用
  • 从0到1实现五子棋游戏!!
  • 二叉树(C/C++)
  • Django学习笔记-ModelForm使用(完全依赖)
  • 动态规划之使用最小花费爬楼梯【LeetCode】
  • 双指针---解决实际问题
  • 每天一个数据分析题(一百七十八)
  • Ethernet/IP转Modbus TCP网关
  • const详解
  • 多方面浅谈互联网技术
  • Oracle EBS GL 外币折算逻辑
  • Java面试题之mysql