C#学习第21天:安全与加密(Security and Cryptography)

核心概念


1. 什么是加密?

  • 加密:加密是一种将数据转换为一种不可读形式的方法,只有持有相应密钥的人才能解密并读取数据。
  • 目的:确保数据的机密性和安全性,特别是在传输过程中过防止未授权访问。

2. 加密类型

对称加密:

  • 使用相同的密钥进行加密和解密。
  • 常见算法:AES、DES。
  • 优点:速度快,适合大数据量加密。

非对称加密:

  • 使用公钥加密和私钥解密。
  • 常见算法:RSA。
  • 优点:安全性高,适合密钥交换和数字签名。

3. 散列函数

  • 散列函数:又称为哈希函数,将任意长度的数据转换为固定长度的字符串。
  • 特点:不可逆,常用于验证数据完整性。
  • 常见算法:MD5、SHA-256。

 实际使用


对称加密示例:AES

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;public class AesEncryptionExample
{public static void Main(){string original = "Sensitive data that needs encryption";// 创建AES加密服务实例using (Aes aesAlg = Aes.Create()){// 加密字符串到字节数组byte[] encrypted = EncryptStringToBytes_Aes(original, aesAlg.Key, aesAlg.IV);// 解密字节数组回字符串string decrypted = DecryptStringFromBytes_Aes(encrypted, aesAlg.Key, aesAlg.IV);Console.WriteLine($"Original: {original}");Console.WriteLine($"Decrypted: {decrypted}");}}static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV){// 参数检查if (plainText == null || plainText.Length <= 0)throw new ArgumentNullException(nameof(plainText));if (Key == null || Key.Length <= 0)throw new ArgumentNullException(nameof(Key));if (IV == null || IV.Length <= 0)throw new ArgumentNullException(nameof(IV));byte[] encrypted;// 使用AES算法using (Aes aesAlg = Aes.Create()){aesAlg.Key = Key; // 设置加密密钥aesAlg.IV = IV;   // 设置初始化向量// 创建一个加密器来执行流转换ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);// 用内存流进行加密using (MemoryStream msEncrypt = new MemoryStream()){// 创建加密流using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)){using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)){swEncrypt.Write(plainText); // 写入并加密数据}encrypted = msEncrypt.ToArray(); // 获取加密后的字节数组}}}return encrypted; // 返回加密字节数组}static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV){// 参数检查if (cipherText == null || cipherText.Length <= 0)throw new ArgumentNullException(nameof(cipherText));if (Key == null || Key.Length <= 0)throw new ArgumentNullException(nameof(Key));if (IV == null || IV.Length <= 0)throw new ArgumentNullException(nameof(IV));string plaintext = null;// 使用AES算法using (Aes aesAlg = Aes.Create()){aesAlg.Key = Key; // 解密密钥aesAlg.IV = IV;   // 初始化向量// 创建解密器ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);// 用内存流进行解密using (MemoryStream msDecrypt = new MemoryStream(cipherText)){// 创建解密流using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)){using (StreamReader srDecrypt = new StreamReader(csDecrypt)){plaintext = srDecrypt.ReadToEnd(); // 读取并解密数据}}}}return plaintext; // 返回解密后的字符串}
}

非对称加密示例:RSA

using System;
using System.Security.Cryptography;
using System.Text;public class RsaEncryptionExample
{public static void Main(){// 创建RSA实例using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()){// 导出公钥和私钥string publicKey = rsa.ToXmlString(false); // 公钥,不包含私钥string privateKey = rsa.ToXmlString(true); // 私钥,包含全部信息string original = "Data for RSA encryption";// 加密数据byte[] encrypted = Encrypt(original, publicKey);// 解密数据string decrypted = Decrypt(encrypted, privateKey);Console.WriteLine($"Original: {original}");Console.WriteLine($"Decrypted: {decrypted}");}}public static byte[] Encrypt(string data, string publicKey){using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()){rsa.FromXmlString(publicKey); // 加载公钥var dataBytes = Encoding.UTF8.GetBytes(data); // 转换数据为字节数组return rsa.Encrypt(dataBytes, false); // 执行加密}}public static string Decrypt(byte[] data, string privateKey){using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()){rsa.FromXmlString(privateKey); // 加载私钥var decryptedBytes = rsa.Decrypt(data, false); // 执行解密return Encoding.UTF8.GetString(decryptedBytes); // 转换回字符串}}
}

SHA-256 散列示例

using System;
using System.Security.Cryptography;
using System.Text;public class HashingExample
{public static void Main(){string data = "Data to hash";// 计算SHA-256散列值string hash = ComputeSha256Hash(data);Console.WriteLine($"Data: {data}");Console.WriteLine($"Hash: {hash}");}public static string ComputeSha256Hash(string rawData){using (SHA256 sha256Hash = SHA256.Create()){// 将输入字符串转换为字节数组并计算其哈希值byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData));// 将字节数组转变为十六进制字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < bytes.Length; i++){builder.Append(bytes[i].ToString("x2")); // 格式化为两位十六进制}return builder.ToString(); // 返回散列值}}
}
  • SHA-256散列值,通常用来验证两个文件是否相同。

这些示例展示了如何在C#中实现常见的安全和加密任务。如果有其他问题或需要进一步讲解,请随时告诉我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/78679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 图形API(77)图像与通道拼接函数-----对图像进行几何变换函数remap()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对图像应用一个通用的几何变换。 函数 remap 使用指定的映射对源图像进行变换&#xff1a; dst ( x , y ) src ( m a p x ( x , y ) , m a p y…

在线时间戳转换工具

给大家推荐一个在线时间戳转换工具 点击跳转-鸽鸽在线工具 这个工具除了时间戳转换&#xff0c;到首页还能选择使用很多其他小工具&#xff0c;欢迎使用

WPF之面板特性

文章目录 1. 概述2. WPF布局系统基础2.1 布局过程概述2.2 布局重新计算的触发条件2.3 布局重新计算的核心方法 3. WPF内置面板类型及特性3.1 面板类型概览3.2 Canvas面板3.3 StackPanel面板3.4 WrapPanel面板3.5 DockPanel面板3.6 Grid面板3.7 UniformGrid面板3.8 Virtualizing…

【技术追踪】通过潜在扩散和先验知识增强时空疾病进展模型(MICCAI-2024)

向扩散模型中引入先验知识&#xff0c;实现疾病进展预测&#xff0c;扩散模型开始细节作业了~ 论文&#xff1a;Enhancing Spatiotemporal Disease Progression Models via Latent Diffusion and Prior Knowledge 代码&#xff1a;https://github.com/LemuelPuglisi/BrLP 0、摘…

[ linux-系统 ] 常见指令2

1. man 指令 语法&#xff1a;man [选项] 命令 功能&#xff1a;查看联机手册获取帮助。 选项说明-k根据关键字搜索联机帮助。num只在第num章节找。-a显示所有章节的内容。 man是 Unix 和类 Unix 系统中的一个命令&#xff0c;用于查看操作系统和软件的手册页面&#xff08;ma…

STL之stackqueue

stack的介绍&#xff08;可以想象成栈&#xff09; 1.stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作 2.stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特点类封装作为其…

【现代深度学习技术】现代循环神经网络06:编码器-解码器架构

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

宏电全新升级单北斗5G电力DTU,为每一公里电力线路注入可靠连接

在配网自动化改造与数字化转型的双重驱动下&#xff0c;宏电股份推出全新升级版H7710-DLWZ系列5G电力DTU&#xff0c;聚焦配网通信链路冗余、国产自主可控、复杂环境适应性三大核心需求&#xff0c;为配电自动化、台区智能运维、分布式能源接入等场景提供高可靠通信底座。 国产…

学习海康VisionMaster之间距检测

一&#xff1a;进一步学习了 今天学习下VisionMaster中的间距检测工具&#xff1a;主要类似于卡尺工具&#xff0c;测量物体的长度或者宽度或者间距 二&#xff1a;开始学习 1&#xff1a;什么是间距检测&#xff1f; 间距测量模块用于检测两特征边缘之间的间距&#xff0c;首…

蓝桥杯 18. 积木

积木 原题目链接 题目描述 小明用积木搭了一个城堡。为了方便&#xff0c;小明使用的是大小相同的正方体积木&#xff0c;并将其搭建在一个 n 行 m 列的方格图上。每个积木占据方格图中的一个小格子。 小明的城堡是立体的&#xff0c;可以将积木垒在其他积木上。当某个格子…

C++负载均衡远程调用学习之基础TCP服务

目录 1.LARS课程模块介绍 2.LARS的功能演示机场景作用 3.LARS的reactor框架的组成部分 4.Lars_reactor的项目目录构建 5.Lars_tcp_server的基础服务开发 6.Lars_tcp_server的accept实现 7.LarsV0.1总结 1.LARS课程模块介绍 2.LARS的功能演示机场景作用 # Lars系统开发 …

EasyExcel使用总结

EasyExcel 文章目录 EasyExcel1、导入1.1、基本方式导入1.导入依赖2. 加载源文件基本语法 3. 读取数据行4. 读取结果 1.2、模型映射导入1.定义实体映射类2. 操作读取基本语法 3. 读取数据行4. 读取结果 1.3、导入类型转换器语法 1.4、导入监听器基本语法&#xff1a; 1.5、多行…

【愚公系列】《Manus极简入门》022-艺术创作顾问:“艺术灵感使者”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…

蓝桥杯15届国赛 最小字符串

问题描述 给定一个长度为 N 且只包含小写字母的字符串 S&#xff0c;和 M 个小写字母 c1,c2,...,cM​。现在你要把 M 个小写字母全部插入到字符串 S 中&#xff0c;每个小写字母都可以插入到任意位置。请问能得到的字典序最小的字符串是什么&#xff1f; 输入格式 第一行包含…

【东枫科技】代理英伟达产品:DPU

NVIDIA BlueField-3 DPU 400Gb/s 基础设施计算平台 NVIDIA BlueField -3 数据处理单元 (DPU) 是第三代基础设施计算平台&#xff0c;使企业能够构建从云端到核心数据中心再到边缘的软件定义、硬件加速的 IT 基础设施。借助 400Gb/s 以太网或 NDR 400Gb/s InfiniBand 网络连接…

依图科技C++后端开发面试题及参考答案

请介绍你所了解的分布式系统 分布式系统是由多个独立的计算节点通过网络连接组成的系统&#xff0c;这些节点共同协作以完成特定的任务。分布式系统的设计目标在于提升系统的性能、可扩展性、可靠性和容错性。 从性能方面来看&#xff0c;分布式系统能够把任务分配到多个节点…

Python cv2滤波与模糊处理:从原理到实战

在图像处理领域&#xff0c;滤波与模糊是预处理阶段的两大核心操作&#xff0c;既能消除噪声干扰&#xff0c;又能实现艺术化效果。本文将结合OpenCV的cv2库&#xff0c;系统讲解滤波与模糊的原理及Python实现&#xff0c;带你从理论到实战全面掌握这项技术。 一、滤波与模糊的…

在 Laravel 12 中实现 WebSocket 通信时进行身份验证

在 Laravel 12 中实现 WebSocket 通信时&#xff0c;若需在身份验证失败后主动断开客户端连接&#xff0c;需结合 频道认证机制 和 服务端主动断连操作。以下是具体实现步骤&#xff1a; 一、身份验证流程设计 WebSocket 连接的身份验证通常通过 私有频道&#xff08;Private …

FPGA----基于ZYNQ 7020实现petalinux并运行一个程序

引言&#xff1a;上一节我们讲到了使用Alinx 7020b自带的sd卡中的petalinux进行epics的编译&#xff0c;但此种方案个性化程度不足。如&#xff1a;我们项目需要FPGA侧的配合&#xff0c;那么我们需要重新编译petalinx。 注意&#xff1a;本文的知识点来自下面两篇文章&#x…

Spring Web MVC————入门(1)

今天开始正式带大家学习Spring部分的内容了&#xff0c;大家尝试去弄个专业版嗷&#xff0c;学习起来爽一点 在idea中下载这个插件就行了 我们之后开始创建Spring项目&#xff0c; 蓝色 部分自己起名&#xff0c;type选Maven&#xff0c;其他的默认就好了&#xff0c;之后nex…