12-C#

宣布 C# 12 正式推出 当然,如果您的应用程序在热路径中使用内存缓冲区,您也可以利用这些功能。C# 的每个版本都可以帮助您编写更好的代码 - 更简单的代码可以更好地表达您的意图。与您以前编写的代码相比,新方法的速度相同或更快,并且具有相同或更少的分配。如果程序集或模块被标记为实验性的,则其中的所有类型都被标记为实验性的。C# 12 引入了集合表达式、所有类和结构的主构造函数、任何类型的别名语法以及可简化代码的 lambda 表达式的默认参数。例如,这将允许为特定参数生成的方法的优化版本来替换效率较低的通用方法。 阅读详情

C#.Net-加密解密-学习笔记


一、加密的分类

加密
├── 不可逆加密(单向散列)
│   └── MD5
└── 可逆加密
    ├── 对称加密(加密/解密用同一个密钥)
    │   └── DES / AES
    └── 非对称加密(加密/解密用不同密钥)
        └── RSA / ECC

二、MD5 —— 不可逆加密(哈希散列)

核心特点

特点说明
不可逆只能加密,无法从密文还原原文
固定长度任意长度的内容,结果都是 32 位(16进制字符串)
雪崩效应原文改动一点点,结果变化非常大
相同输入相同输出同一原文每次加密结果完全一样
与文件名无关文件内容不变,改名字不影响 MD5 值

代码示例

// 字符串加密(默认32位)
string hash = MD5Encrypt.Encrypt("123456");

// 16位(取32位结果的第9~24位字符)
string hash16 = MD5Encrypt.Encrypt("123456", 16);

// 文件摘要
string fileHash = MD5Encrypt.AbstractFile(@"C:\test.txt");

核心实现原理

HashAlgorithm provider = CryptoConfig.CreateFromName("MD5") as HashAlgorithm;
byte[] bytes = Encoding.UTF8.GetBytes(source);
byte[] hashValue = provider.ComputeHash(bytes);
// 把每个字节转成两位16进制字符串拼接
sb.Append(hashValue[i].ToString("x2"));

MD5 的实际用途

1. 防篡改 / 文件校验

  • SVN 等版本管理工具用 MD5 检测文件是否被修改
  • 网盘"极速秒传":扫描本地文件 MD5,与服务器已有文件比对,一致则无需重新上传

2. 密码存储

  • 数据库不能存明文密码,存 MD5 密文
  • 登录时把用户输入的密码 MD5 后与数据库比对
  • 为防止简单密码被暴力破解,通常要加盐
加盐示例:MD5("123456" + "固定盐值zhaoxi")
或者:MD5(MD5("123456"))  // 二次加密

3. 数字签名 / 防抵赖

  • 对文件内容做 MD5 摘要,由权威第三方保存,证明文件归属

MD5 "被破解"的真相

MD5 本身没有被数学破解,但可以通过彩虹表(暴力标本库)反查。

  • 32位 MD5 有 2^128 种可能,不可能全部存储
  • 加盐后,彩虹表基本失效

三、DES —— 对称可逆加密

核心特点

  • 加密和解密用同一个密钥
  • 速度快,适合大量数据加密
  • 密钥长度固定 8字节
  • 缺点:密钥需要安全传递,一旦泄露全完

代码示例

// 加密
string encrypted = DesEncrypt.Encrypt("Hello World");

// 解密
string original = DesEncrypt.Decrypt(encrypted);

核心实现原理

// 密钥和初始向量都取配置文件中 DesKey 的前8位
private static byte[] _rgbKey = ASCIIEncoding.ASCII.GetBytes(Constant.DesKey.Substring(0, 8));
private static byte[] _rgbIV  = ASCIIEncoding.ASCII.GetBytes(Constant.DesKey.Substring(0, 8));

// 加密流程:明文 → CryptoStream(加密器) → MemoryStream → Base64字符串
DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();
CryptoStream crypStream = new CryptoStream(memStream,
    dsp.CreateEncryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write);

密文最终用 Base64 编码输出,方便存储和传输。

同类算法

算法密钥长度说明
DES56位(8字节)较老,安全性一般
3DES168位DES 的增强版
AES128/192/256位目前主流,推荐使用

四、RSA —— 非对称可逆加密

核心概念

RSA 使用一对密钥:公钥(Public Key)和私钥(Private Key)。

密钥特点用途
公钥可以公开给任何人加密数据 / 验证签名
私钥只有自己保存解密数据 / 生成签名

关键原则:两个 key 无法互相推导出对方。

两种使用场景

场景一:保密通信(公钥加密,私钥解密)

发送方用接收方的公钥加密 → 只有持有私钥的接收方才能解密
KeyModel keys = RsaEncrypt.GetKeyPair();

// 用公钥加密
string encrypted = RsaEncrypt.Encrypt("Hello", keys.PublicKey);

// 用私钥解密
string original = RsaEncrypt.Decrypt(encrypted, keys.PrivateKey);

场景二:数字签名(私钥签名,公钥验证)

发送方用私钥对内容签名 → 任何人用公钥都能验证签名是否合法
// 生成签名(用私钥)
string signature = RsaEncrypt.SignData("消息原文", keys.PrivateKey);

// 验证签名(用公钥)
bool isValid = RsaEncrypt.VerifyData("消息原文", signature, keys.PublicKey);
// 原文被篡改 → false
// 签名被篡改 → false

核心实现原理

// 生成密钥对
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
string publicKey  = RSA.ToXmlString(false); // false = 只含公钥
string privateKey = RSA.ToXmlString(true);  // true  = 含公钥+私钥

// 加密
rsa.FromXmlString(encryptKey);
byte[] resultBytes = rsa.Encrypt(DataToEncrypt, false);

// 签名(内部用 SHA1 做摘要,再用私钥加密摘要)
byte[] AOutput = oRSA3.SignData(messagebytes, "SHA1");

// 验签
bool bVerify = RSA.VerifyData(messagebytes, "SHA1", messageAutographbytes);

C# 内置 RSA 的限制

C# 内置的 RSACryptoServiceProvider 只支持:

  • 公钥加密 + 私钥解密
  • 私钥签名 + 公钥验签

如果需要"私钥加密 + 公钥解密",需要引入第三方库 BouncyCastle。


五、三种加密方式对比总结

对比项MD5DES(对称)RSA(非对称)
是否可逆否是是
密钥数量无1个(共享)2个(公钥+私钥)
速度快快慢
安全性中(需加盐)中(密钥传递风险)高
典型用途密码存储、文件校验数据传输加密安全通信、数字签名

六、实际项目中的常见组合

HTTPS 的工作原理(RSA + AES 组合):

  1. 服务器把公钥发给客户端
  2. 客户端生成一个随机的 AES 密钥,用公钥加密后发给服务器
  3. 服务器用私钥解密,得到 AES 密钥
  4. 后续通信全部用 AES 对称加密(速度快)

这样既解决了对称加密密钥传递不安全的问题,又保证了通信速度。


七、配置文件读取(扩展知识)

项目中通过 appsettings.json 存储 DES 密钥,用 Microsoft.Extensions.Configuration 读取:

{
  "DesKey": "Richard123456"
}
IConfigurationBuilder builder = new ConfigurationBuilder()
    .AddJsonFile("appSettings.json");
IConfigurationRoot configuration = builder.Build();
string desKey = configuration.GetSection("DesKey").Value;

密钥不要硬编码在代码里,放配置文件或环境变量更安全。

C# 12 中的新增功能 除了本概述之外,您还可以在中找到详细文档。要亲自测试这些功能,您可以下载最新的或最新的。以及 .NET 博客上的其他帖子,了解为开发人员带来的其他信息。 阅读详情

相关推荐

深入C# 12的心脏:高级模式匹配的革命

C# 12的高级模式匹配功能,不仅让代码更加简洁,还增强了代码的可读性和维护性。通过这篇文章,我们深入了解了C# 12中的高级模式匹配,包括记录模式、位置模式、元组模式和属性模式等。这些特性将帮助你编写更简洁、更强大的代码。

墨夶的博客 521

如何通过示例将旧版 C# 转换为 C# 12

随着 C# 的不断发展,每个新版本都会引入强大的新功能,从而提高语言的功能和可读性。通过从旧版本的 C# 迁移到 C# 12,您可以获得更高效、更易于维护和更具表现力的代码。

技术探索驿站 1118

音频DSP开发中的‘隐藏关卡’:那些SigmaStudio未公开的模块计算秘籍

本文深入探讨音频DSP开发中SigmaStudio未公开的模块计算秘籍,重点解析动态范围控制、均衡器参数映射和混响算法优化等核心模块计算公式。通过实际案例揭示如何利用这些非官方技巧提升音频质量与系统性能,为ADI DSP开发者提供宝贵的实战经验。

water的专栏 911

C# OnnxRuntime yolo12

C# OnnxRuntime yolo12

.NET 人工智能实践 1445

CMAC算法原理

2、K1 通过以下运算导出:若 L 的最高有效位等于 0,则 K1 是 L 的左移 1 位。3、K2 通过如下运算导出:若 K1 的最高有效位等于 0,则 K2 是 K1 的左移 1 位。采用了 AES 算法中的类似 CBC 模式的加密方式,即对前一个分组的密文与当前分组的明文进行异或操作后在加密,2、分块处理:首先将消息分成多个固定长度的块,若消息长度不是块大小的倍数,则可以使用填充来将其填充到合适的大小。1、子密钥计算,通过主密钥生成子密钥(key1,key2),子密钥用于最后一个块处理;

sky的博客 1658

TSMaster如何用珠海创芯CAN卡实现高效CAN通信(附完整驱动安装指南)

本文详细介绍了如何使用TSMaster软件与珠海创芯CAN卡实现高效CAN通信,包括驱动安装、系统配置、ControlCAN.dll替换及TSMaster集成配置等关键步骤。通过实战指南和故障排除技巧,帮助工程师快速搭建稳定可靠的CAN通信测试环境,适用于汽车电子和工业控制等领域。

weixin_29201859的博客 479

C#12 技术手册(一)

原文:zh.annas-archive.org/md5/e2c84fd09097e50aedbc4e5989f32a85 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 C# 12 代表了微软旗舰编程语言的第九个重大更新,将 C#定位为一种具有非同寻常灵活性和广度的语言。一方面,它提供了高级抽象,如查询表达式和异步继续,而另一方面,它通过自定义值类型和可选指针等构造允许低级效率。 这种增长的代价是需要学习的内容比以往任何时候都多。尽管诸如微软的 IntelliSense 和在线参考等工具在帮助您

龙哥盟 2006

行人检测模型在海思平台上的部署:从 PyTorch 到 NNIE 深度优化与实践

摘要 本文详细介绍行人检测模型从PyTorch到海思NNIE平台的部署流程。首先分析了行人检测面临的挑战(尺度变化、遮挡、姿态多样性等)及边缘部署的优势(实时性、隐私保护等)。重点阐述了模型转换过程:PyTorch→ONNX→Caffe→NNIE-WK,其中PyTorch转ONNX需注意评估模式设置、虚拟输入匹配、操作集版本选择等关键点。文章旨在帮助开发者在海思3516D芯片上实现高效的行人检测,克服部署过程中的常见问题,最终实现边缘设备的实时目标检测能力。

FJN110的博客 215

C#12新增功能

作为.NET 8的实验性功能,在未来的版本中有可能被修改甚至删除,因此,它不应该在生产环境中使用。拦截器是一种方法,该方法可以在编译时以声明方式将对可拦截方法的调用替换为对其自身的调用。前面的代码演示了用于初始化计算的只读属性的主构造函数。新的 C# 12 功能在预览版中已经引入. 您可以使用最新的 Visual Studio 预览版或最新的 .NET 8 预览版 SDK 来尝试这些功能。你只需要告诉你的魔术盒你想要什么(比如,你想要的玩具魔方的长度,或者芭蕾舞泰迪熊的最小数量),它就会给你,都不用进去!

u010194236的博客 845

ROS Motion Planning运动规划库安装方法及进阶使用方法详细介绍

​今天偶然发现了一个优质的运动规划库:ai-winter/ros_motion_planning,比较适合从事ROS移动机器人运动规划研究领域的小伙伴学习和使用,相比于莱斯大学Kavraki实验室提供的开源的著名运动规划库OMPL、或着我之前介绍过的zhm-real开源的zhm-real/MotionPlanning和zhm-real/PathPlanning运动规划库,今天介绍的ROS Motion Planning运动规划库与ROS机器人中常用的Navigation导航框架的兼容性更好,库中的运动规划

慕羽★的博客 5576

Codex 100个真实案例 - 用AI自动生成API测试用例(接口测试全覆盖)

API 测试是保障后端质量的关键环节,但手写测试用例既枯燥又容易遗漏。本案例将展示如何用 Codex 从 Swagger/OpenAPI 规范文档自动生成 pytest 测试用例——包括正常流程测试、边界值测试、异常参数测试、性能压力测试,还能自动生成 Mock 数据和精美的 HTML 测试报告。全程自然语言驱动,让 API 测试覆盖率从 0 飙到 90%+!

yueyeguzhuo的专栏 268

C# 12 中新增的八大功能你都知道吗?

转眼之间C#都已经更新到了12了,那么C# 12 中新增的八大功能你都了解过吗?今天我们来简单介绍一下C# 12 中新增的八大功能。C#/.NET该如何自学入门?👉C# 12 中的新增功能 - C# 指南 - C# | Microsoft Learn👉同学们可以使用最新的 Visual Studio 2022 版本或 .NET 8 SDK 尝试这些功能。

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 1371

STM32入门教程:水位传感器应用

这是一个简单的STM32水位检测系统的入门教程。希望通过学习本教程,您能对STM32微控制器的基本应用有更深入的了解,并能成功构建一个水位检测系统。如果您需要更详细的代码实例和教程,请参考相关的STM32开发手册和应用笔记。STM32是一款功能丰富且广泛应用于嵌入式系统的微控制器系列。在本教程中,我们将介绍如何使用STM32微控制器和水位传感器构建一个水位检测系统。

wx_linying1029的博客 533

探索 C# 12 Interceptor 的魔力

探索 C# 12 Interceptor 的魔力Intro虽然这一特性目前仍然是一个实验性的特性,但是它的功能的强大,而且在 .NET 8 中正式版的代码中已经在使用了,让我觉得它值得分享,让我们一起探索 Interceptor 的魔力吧。本次分享分为以下四部分第一部分我们会介绍下什么是 Interceptor第二部分会介绍为什么要用到 Interceptor第三部分主要是怎么写 Intercep...

zls365365的博客 318

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# 12 中的 Interceptor 特性

C# 12 中的 Interceptor 特性Intro在 C# 12 中引入了一个新的特性,可以借助这个新特性来实现一个简单的 AOP 的逻辑,.NET 8 中的 asp.net core RequestDelegate 和 configuration source generator 也在使用这一特性,我们也来了解一下这个特性和基本的使用吧Get Started首先来看一个简单的示例names...

dotNET跨平台 450

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# 12 中的 Primary Constructor

C# 12 中的 Primary ConstructorIntro在即将到来的 C# 12 中,觉得 Primary Constructor算是比较实用的特性之一了,和大家分享一下Sample直接来看几个使用示例吧fileclassAnimal(stringname) { publicstringName=>name; } filesealedclassCa...

dotNET跨平台 430

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# 12 新特性 collection expression

C# 12 新特性 collection expressionIntroC# 12 中引入了一个 collection literal 或者叫 collection expression 的特性(起初叫 collection literal 后面改名叫 collection expression 了)基本这一特性大部分的集合都可以使用 [1, 2, 3] 这样的语法来创建对象,对于想从一个集合类型...

dotNET跨平台 567

C# 12 中的 InlineArray 特性

C# 12 中的 InlineArray 特性IntroC# 12 引入了一个 InlineArray 特性,利用这一特性,我们可以更方便地类数组的结构体,可以代替原来要使用非安全代码的 fixed size bufferSample来看一个简单的使用示例吧InlineArrayAttribute 声明示例:[InlineArray(10)] filestructMyArray { /...

zls365365的博客 262

C# 12 新增功能实操!

今天咱们一起来探索并实践 C# 12 引入的全新功能!C#/.NET该如何自学入门?注意:使用这些功能需要使用最新的 Visual Studio 2022 版本或安装 .NET 8 SDK。

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 794

C#12 中 5 个节省你开发时间的的改进

C# 12 带来了许多令人兴奋的新特性,从语法糖到模式匹配的改进等等,这些新特性不仅让代码变得更加简洁高效,还能提升我们的编程体验。本文将和你一起探索这 5 个值得尝试的新特性,看看它们是如何在实际开发中发挥作用的。

yangshuquan的专栏 962
上一篇: 04-C#
下一篇: 08-C#
似水明俊德
博客等级 码龄8年 247粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值