当前位置: 首页 > 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[]>();

相关文章:

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("你…...

上拉电阻与下拉电阻、电容的作用

上拉电阻与下拉电阻 在单片机电路中&#xff0c;上拉电阻和下拉电阻都是常见的电路元件&#xff0c;它们在数字电路设计中扮演着重要的角色。它们的作用如下&#xff1a; 1. **上拉电阻**&#xff1a; - **作用**&#xff1a;当一个引脚没有外部信号时&#xff0c;上拉电阻…...

《Spring Security 简易速速上手小册》第1章 Spring Security 概述(2024 最新版)

文章目录 1.1 Spring Security 的重要性1.1.1 基础知识详解1.1.2 主要案例&#xff1a;用户认证与授权1.1.3 拓展案例 1&#xff1a;OAuth2 社交登录1.1.4 拓展案例 2&#xff1a;JWT 认证 1.2 Spring Security 的核心特性1.2.1 基础知识详解1.2.2 主要案例&#xff1a;基于角色…...

vue页面菜单权限问题解决

带锚点的url,#后面部分后端获取不到. vue的页面是带有#的路由,#后端服务获取不到,只在浏览器端有用. URL 中的哈希符号 (#) 被用来作为网页中的 锚点 使用&#xff0c;锚点的含义就是页面中的某个特定的位置&#xff0c;这个位置可以被快速找到&#xff0c;很类似于在该位置抛…...

C++面试宝典第33题:数组组成最大数

题目 给定一组非负整数nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 示例1: 输入:nums = [10, 2] 输出:"210" 示例2: 输入:nums = [3, 30, 34, 5, 9] 输出:"…...

“影像承载初心” 国际数字影像产业园2024首届摄影沙龙诚邀您的参与!

2024年2月29日&#xff0c;树莓集团总部国际数字影像产业园将举行“影像承载初心”2024首届摄影沙龙&#xff0c;活动现场邀请摄影业内大咖与专家共聚成都文创产业园&#xff0c;探讨摄影艺术及影像未来。诚邀您的参与&#xff01; 国际数字影像产业园介绍&#xff1a; 国际数…...

【C语言】while循环语句

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…...

2024数字中国创新大赛·数据要素赛道“能源大数据应用赛”正式上线!参赛指南请查收

近日&#xff0c;由国网福建电力承办的2024数字中国创新大赛能源大数据应用赛正式上线发布。赛事按照数字中国建设、能源革命的战略要求&#xff0c;围绕能源数据要素x、能源数字技术、能源商业模式等热点设置赛题&#xff0c;诚邀社会各界为加快建成新型电力系统出谋划策&…...

react-JSX基本使用

1.目标 能够知道什么是JSX 能够使用JSX创建React元素 能够在JSX中使用JS表达式 能够使用JSX的条件渲染和列表渲染 能够给JSX添加样式 2.目录 JSX的基本使用 JSX中使用JS表达式 JSX的条件渲染 JSX的列表渲染 JSX的样式处理 3.JSX的基本使用 3.1 createElement()的问题 A. …...

学习阶段单片机买esp32还是stm32?

学习阶段单片机买esp32还是stm32? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「stm32的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xf…...

【Simulink系列】——Simulink子系统子系统封装模块库技术

声明&#xff1a;本系列博客参考有关专业书籍&#xff0c;截图均为自己实操&#xff0c;仅供交流学习&#xff01; 引入 前面对于简单的动态系统仿真&#xff0c;可以直接建立模型&#xff0c;然后仿真。但是对于复杂的系统&#xff0c;直接建立系统会显得杂乱无章&#xff0…...

一加手机线刷2024版,param预载失败/MSM刷机工具报错

如果之前有刷第三方或者手机出问题&#xff0c;先去下载9008线刷包&#xff0c;可以去去大侠阿木的网站搜索。 这次的主题是param刷机报错&#xff0c;当你确保端口提示有QCOM端口&#xff0c;没有感叹号你需要先卸载设备及其驱动&#xff0c;重新插上手机&#xff0c;在WINDO…...

文件拖放到窗体事件

网上的实现1 实现结果 具体实现代码&#xff1a;注意需要使能允许拖拽 public partial class Form1 : Form {public Form1(){InitializeComponent();this.AllowDrop true; //允许拖拽}private void Form1_DragEnter(object sender, DragEventArgs e){this.Text DateTime.No…...

JAVA集成微信支付V3版JSAPI下单

一、引入微信支付SDK <dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-pay</artifactId> </dependency> 二、支付参数封装 Data ConfigurationProperties(prefix "wx.pay") public class WxP…...

opengles 背面剔除介绍(十二)

文章目录 前言一、OpenGL ES 剔除功能简介二、Opengl ES 剔除功能相关的API1.使能剔除功能2. 配置面剔除模式3. 设置剔除面的顺序4. 禁用剔除功能总结参考资料前言 本文主要介绍 opengles3.0 中的背面剔除相关知识,对于绘制3d 图形, 经常会用到它,并且它能提升渲染效率 软硬…...

【深度学习:视频注释】如何为机器学习自动执行视频注释

【深度学习&#xff1a;视频注释】如何为机器学习自动执行视频注释 #1&#xff1a;多目标跟踪 &#xff08;MOT&#xff09; 以确保帧与帧之间的连续性#2&#xff1a;使用插值来填补空白#3: 使用微模型加速人工智能辅助视频注释#4: 自动目标分割提高目标分割质量 自动视频标记通…...

网络编程、UDP、TCP

计算机网络 就是将地理位置不同的具有独立功能的多台计算及外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软件以及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统 目的 传播交流信息、数据交换、通信 如何做…...

Maya笔记 设置工作目录

Maya会把素材场景等自动保存在工作目录里&#xff0c;我们可以自己定义工作目录 步骤1 创建workspace.mel文件 文件/设置项目 ——>选择一个文件夹&#xff0c;点击设置——>创建默认工作区 这一个后&#xff0c;可以在文件夹里看到.mel文件 步骤2 自动创建文件夹…...

MySQL:连接查询

连接查询是将两个或两个以上的表按照某个条件连接起来&#xff0c;从中选取需要的数据&#xff1b; 查询t_book表数据 查询t_bookType表数据 1、内连接查询 內连接查询是一种最常用的连接查询。内连接查询可以查询两个或者两个以上的表&#xff1b; SELECT * FROM t_book,t_bo…...

歌尔气压计SPA06-003在无人机和手表上的创新应用

随着科技的不断进步&#xff0c;各类智能设备的功能日益强大&#xff0c;其中气压计作为一种能够测量大气压力的传感器&#xff0c;已被广泛应用于多种领域。歌尔气压计以其高精度、低功耗的特点&#xff0c;在无人机和智能手表上的应用尤为突出&#xff0c;为这两个领域的产品…...

如何零成本掌握专业音频编辑:5个实战场景+3步高效流程+7个核心技巧

如何零成本掌握专业音频编辑&#xff1a;5个实战场景3步高效流程7个核心技巧 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 想要创作专业级音频内容却担心成本和技术门槛&#xff1f;今天我将为你揭秘一款完全免…...

从《倘若鸟儿回还》看无障碍设计:如何用技术为轮椅用户打造真正的“独立出行”体验

从《倘若鸟儿回还》看无障碍设计&#xff1a;如何用技术为轮椅用户打造真正的“独立出行”体验 艾米的故事让我们看到&#xff0c;残障人士对独立性的渴望往往被善意所掩盖。查尔斯希望成为她"唯一的推椅人"&#xff0c;却忽略了轮椅对她而言不是束缚&#xff0c;而是…...

三分钟快速定位:Windows热键冲突终极解决方案指南

三分钟快速定位&#xff1a;Windows热键冲突终极解决方案指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾经按…...

PPTAgent:3分钟用AI生成专业演示文稿,告别繁琐的手工制作

PPTAgent&#xff1a;3分钟用AI生成专业演示文稿&#xff0c;告别繁琐的手工制作 【免费下载链接】PPTAgent An Agentic Framework for Reflective PowerPoint Generation 项目地址: https://gitcode.com/gh_mirrors/pp/PPTAgent 你是否曾为制作演示文稿而烦恼&#xff…...

从零到一:深入剖析Transformer解码器的核心机制与实战应用

1. Transformer解码器基础&#xff1a;从编码器到解码器的跨越 第一次接触Transformer架构时&#xff0c;最让我困惑的就是解码器部分。和编码器相比&#xff0c;解码器多了两个关键设计&#xff1a;Masked Self-Attention和Cross-Attention。这两个机制让解码器能够完成序列生…...

告别裸机思维:用STM32CubeMX和HAL库快速搭建串口调试打印框架(Keil5工程)

STM32CubeMX与HAL库实战&#xff1a;构建高效串口调试框架 在嵌入式开发中&#xff0c;串口调试是最基础却至关重要的技能。想象一下&#xff0c;当你的代码在目标板上运行时&#xff0c;如何快速定位问题&#xff1f;如何验证变量值是否符合预期&#xff1f;一个可靠的串口打…...

【AGI医疗应用黄金窗口期】:2024年三大临床落地场景与72小时快速验证路径

第一章&#xff1a;AGI的医疗应用前景展望 2026奇点智能技术大会(https://ml-summit.org) 通用人工智能&#xff08;AGI&#xff09;正从理论构想加速迈向临床验证阶段&#xff0c;其在医疗健康领域的渗透已超越传统AI的单点优化范式&#xff0c;转向跨模态理解、动态推理与自…...

STM32 FOC电机库PID调参避坑指南:为什么你的定点参数调不好?

STM32 FOC电机库PID调参避坑指南&#xff1a;为什么你的定点参数调不好&#xff1f; 调试电机控制系统的PID参数就像在给一台精密仪器做微创手术——参数调整的每一个细节都可能影响最终性能表现。对于使用STM32 FOC电机库的工程师来说&#xff0c;定点PID参数的调试尤其考验技…...

RMBG-2.0大模型优化:提升处理速度的10个技巧

RMBG-2.0大模型优化&#xff1a;提升处理速度的10个技巧 1. 引言 如果你用过RMBG-2.0这个背景去除工具&#xff0c;肯定会被它的精准抠图效果惊艳到——发丝级别的细节保留&#xff0c;复杂背景的完美分离&#xff0c;确实让人印象深刻。但你可能也注意到了&#xff0c;处理一…...

用Global Wheat Detection数据集做目标检测?这份保姆级数据预处理与可视化教程请收好

Global Wheat Detection数据集实战&#xff1a;从数据解析到可视化洞察 小麦作为全球最重要的粮食作物之一&#xff0c;其产量预测对农业决策至关重要。而准确检测田间小麦头数量是产量估算的关键步骤。Global Wheat Detection数据集正是为此而生&#xff0c;它包含了来自全球…...