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

ASP.NET C# 通过URL加密解密传输数据 需求 使用HTML模板发送邮件,邮件中含有一个链接,点击链接打开浏览器,完成相应功能。 分析 链接使用http://www.******.com?id=123456&name=Nicholas这种URL后面加连接字符串的形式。 问题 问号后面的字符串是明文,不能传输一些敏感数据,并且容易遭到篡改。 解决方法 将问号后面的字符串加密,需要的时候再解密。 使用html模板发送电子邮件在 阅读详情

一、加密的分类

加密
├── 不可逆加密(单向散列)
│   └── 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#实现AES CBC加密的源码实战 AES(Advanced Encryption Standard)即高级加密标准,是一种广泛应用于全球的对称加密算法。它由美国国家标准与技术研究院(NIST)在2001年发布,旨在替代过时的DES算法,以提供更强的安全性。对称加密意味着加密和解密过程中使用的密钥是相同的。AES支持三种不同长度的密钥:128位、192位和256位,分别对应于其加密强度。无论密钥长度如何,AES都使用固定长度的128位数据块进行处理。 阅读详情

相关推荐

C#加密算法实现源码详解与实践

加密算法在数据保护、通信安全和个人隐私保护领域扮演着至关重要的角色。它们通过将数据转换成一种只有经过授权的接收者才能解读的形式来确保信息的安全性。在数字化日益普及的今天,对加密技术的理解和应用成为了IT专业人士不可或缺的一部分。

weixin_42593701的博客 1068

C#加密知识(Windows数据保护、对称加密、非对称加密等)

.NET的加密方式有以下几种 1.Windows数据保护 特点:管理秘钥数量是0,速度快,由用户的密码决定强度,备注:使用隐式生成的密钥对字节数组进行加密和解密。 以下代码简单演示了加密和解密的过程,注意要添加引用System.Security.dll using System.Security.Cryptography; using System.Security; byte[] origi...

weixin_42974146的博客 616

AES加密解密算法与C#实现实战

本文还有配套的精品资源,点击获取 简介:AES(高级加密标准)是一种广泛使用的对称加密算法,在C#中实现AES加密解密可以利用.NET框架提供的System.Security.Cryptography命名空间。本课程设计项目实战提供了AES加密解密的C#实现代码,包括密钥扩展、数据分块、加密/解密循环和CBC模式等关键步骤的详细讲解。通过实践任务,学生将掌握AES算法的实际...

weixin_28931507的博客 2032

网络安全入门笔记(共327页),助你步入安全门槛

网络安全入门笔记(共327页),助你步入安全门槛

Spontaneous_0的博客 1484

C#实现AES加密解密技术详解

高级加密标准(AES)是由美国国家标准与技术研究院(NIST)在2001年正式公布的。它替代了之前的DES加密算法,并迅速成为全球认可的对称密钥加密标准。AES算法以简洁高效、安全性高著称,广泛应用于金融、政府及各种安全敏感领域。WPF应用程序以其丰富的交互性和美观的用户界面而著称。它允许开发者使用XAML(可扩展应用程序标记语言)来描述用户界面的布局和外观,同时使用C#或其他.NET支持的语言来编写业务逻辑。

weixin_35811662的博客 2261

C#与.NET框架下的AES128加密解密技术应用

在信息时代,数据安全成为企业、政府和个人关注的焦点。作为对称加密算法的代表,AES(Advanced Encryption Standard)被广泛应用于各种场景,以保护数据免遭未授权访问。本章将介绍AES128算法的基本概念、工作原理及在现代计算环境中的重要性。在开始集成之前,我们需要创建一个新的WinForms项目。首先,打开Visual Studio,选择“创建新项目”并选择Windows Forms App (.NET Framework)作为项目模板。

weixin_36073714的博客 845

C#.NET密码加密解密源码Demo

C#.NET密码加密解密Demo,代码完整,简单易懂,功能实用。 获取源码方式: 第一种:打开微信,搜一搜"别打我女儿的主意"打开微信小程序,找到菜单栏,点击源码,进去就可以获得链接 第二种:可以给本文点赞、好评,然后发邮件到792166417@qq.com,如果有学习资料视频可以分享的话,可以捎带分享给我。 DESEncrypt.cs: using System; using Sy...

IT_0802的博客 2239

基于.NET的RSA加密解密实现源码完整解析

非对称加密技术是现代网络安全的基石。不同于对称加密需要共享密钥的做法,非对称加密引入了公钥和私钥的概念。公钥可公开,用于加密数据;私钥必须保密,用于解密。RSA算法是应用最广泛的非对称加密算法之一。.NET框架提供了一系列加密服务,统称为.NET加密服务提供者(Cryptographic Service Providers, CSPs)。这些服务允许开发者在他们的应用程序中实现安全相关的功能,如加密、解密、散列计算和数字签名等。

weixin_42430341的博客 954

.NET 实现RSA加密解密 C#

目录RSA一、生成密钥二、加密解密1.加密2.解密完整代码 RSA 在项目中经常会使用到一些加密场合,恰好最近有用到RSA加密解密算法,以此篇文章记录一下。 RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。 .net实现RSA加密解密算法

kaisaooo的博客 6164

深入理解.NET框架中的AES加密解密DEMO[AESEncrypt]

在网络安全日益重要的今天,加密解密技术成为了保护数据安全的关键技术之一。本文将通过.NET平台上的DEMO演示,深入浅出地介绍AES加密解密算法的应用,帮助开发者在实际项目中更好地理解和应用这些技术。全文将按照.NET加密解密操作的顺序,逐步讲解DEMO的结构和主要功能。通过逐步解析和操作演示,本文旨在帮助读者建立起.NET环境下处理加密解密的实践框架。在第一章节,我们重点介绍DEMO的界面布局、功能菜单及其背后的基本原理,为后续章节的深入学习打好基础。

weixin_42400643的博客 1051

Visual C#中的加密解密技术与实践

本文还有配套的精品资源,点击获取 简介:加密和解密在编程中是保障数据安全的核心技术,特别是在使用C#进行软件开发时。本文将深入探讨Visual C#中的加密解密机制,包括对称加密(如AES、DES、3DES)和非对称加密(如RSA、ECC)算法的实现。通过C#中内置的加密类库,如 System.Security.Cryptography.Aes 和 R...

weixin_31938351的博客 1206

C# AES填充加密解密

AES在线加密解密工具地址: http://tool.chacuo.net/cryptaes 1、AES加密测试 2、AES解密测试 3、上述加密解密对应的C#代码如下: namespace hbl.Utils { class AESUtils { /// <summary> /// AES加密算法 http:...

abcwanglinyong的博客 2225

.NET平台RSA加密解密源码实现详解

本文还有配套的精品资源,点击获取 简介:本压缩包文件“基于.net的RSA私钥加密 公钥解密的源码__(0521).rar”提供了C#语言实现的RSA加解密示例代码,帮助理解RSA工作原理和在.NET环境中的应用。文章详细介绍了RSA算法的核心原理、密钥对的生成、加密解密过程及密钥管理等关键步骤,并讨论了在.NET框架中使用RSACryptoServiceProvider类...

weixin_35797963的博客 1419

C加密解密工具集:一款强大的C加密解密利器

C加密解密工具集:一款强大的C#加密解密利器 去发现同类优质开源项目:https://gitcode.com/ 在当今信息时代,数据安全显得尤为重要。加密和解密技术成为保护信息不被非法窃取和篡改的关键手段。C# 加密解密工具集,作为一款功能全面的C#工具集,为广大开发者提供了多种加密解密算法的实现。以下是该项目详细介绍。 项目介绍 C# 加密解密工具集是一个开源项目,它集合了AES、DES、RSA...

gitblog_06727的博客 649

C++与C#中DES加密解密的实现对比

DES,即Data Encryption Standard(数据加密标准),是一种对称密钥加密块密码算法,广泛应用于商业和金融机构以保护电子数据的机密性。它由IBM公司在1970年代初期开发,并在1976年被美国政府采纳为官方的加密标准。在本文中,我们深入探讨了DES加密算法的原理、在不同编程语言中的实现方式,以及在实际应用中密钥管理和数据填充策略的重要性。我们分析了跨平台兼容性考虑和安全编程实践的必要性,并提供了实际代码示例来说明如何在C++和C#中应用这些技术。

weixin_33375360的博客 824

C#与Node.js中的AES 256加密解密实践

本文还有配套的精品资源,点击获取 简介:本项目展示了如何在C#和Node.js中实现AES 256加密与解密,确保多语言环境下数据交换的安全性。介绍了.NET框架和Node.js的 crypto 模块在AES加密中的应用,并强调了在两种不同语言环境中保持加密和解密一致性的重要性。项目包含C#和Node.js代码文件,示例数据以及配置文件,旨在帮助开发者掌握跨语...

weixin_32480007的博客 1532

C#学习笔记(一)

简介 第一章 上位机开发环境之 VS 使用和.NET 平台基础 一、安装软件 二、创建项目 三、第一个Hello world 四、解决方案与项目 五、Debug 和 Release 的区别 六、代码的生产过程 七、CLR的其它功能

m0_53264919的博客 2343

C# 实现 DES 和 MD5 加密解密工具的综合应用

数据加密技术的目的在于保护数据的机密性、完整性和可用性,防止数据被未经授权的访问和篡改。通过数据加密,敏感信息在存储或传输过程中即便被截获,攻击者也无法轻易解读。数据加密分为两大类:对称加密和非对称加密。在对称加密中,加密和解密使用同一密钥,DES(数据加密标准)是一种典型的对称加密算法。非对称加密涉及一对密钥:公钥用于加密数据,私钥用于解密。RSA算法是应用较为广泛的一种非对称加密算法。

weixin_31620365的博客 1192
上一篇: 11-C#.Net-多线程-Async-Await篇-学习笔记
下一篇: 13-C#.Net-设计模式六大原则-学习笔记
似水明俊德
博客等级 码龄8年 247粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值