C#经常用的加密解密算法

1. 引言

在软件开发中,数据的安全性和保密性非常重要。为了保护数据免受未经授权的访问和泄露,我们经常需要对敏感数据进行加密和解密。在C#中,有许多常用的加密解密方法可供选择。本文将详细介绍C#中经常使用的加密和解密方法。
在这里插入图片描述


目录

    • 1. 引言
    • 2. 对称加密算法
      • 2.1 DES加密算法
      • 2.2 AES加密算法
    • 3. 非对称加密算法
      • 3.1 RSA加密算法
    • 4. 散列算法
      • 4.1 MD5散列算法
      • 4.2 SHA散列算法
    • 5. 总结


2. 对称加密算法

对称加密算法使用相同的密钥对数据进行加密和解密。下面是C#中经常使用的两种对称加密算法:

2.1 DES加密算法

DES(Data Encryption Standard)是一种对称加密算法,它使用56位密钥对数据进行加密和解密。下面是一个使用DES加密算法的示例:

using System;
using System.Security.Cryptography;
using System.Text;public class Program
{static void Main(string[] args){string plainText = "Hello, World!";string key = "mysupersecretkey";byte[] encryptedData = EncryptDES(plainText, key);string decryptedData = DecryptDES(encryptedData, key);Console.WriteLine($"Original data: {plainText}");Console.WriteLine($"Encrypted data: {Convert.ToBase64String(encryptedData)}");Console.WriteLine($"Decrypted data: {decryptedData}");}static byte[] EncryptDES(string plainText, string key){byte[] keyBytes = Encoding.UTF8.GetBytes(key);byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);using (DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider()){cryptoProvider.Key = keyBytes;cryptoProvider.Mode = CipherMode.ECB;using (ICryptoTransform encryptor = cryptoProvider.CreateEncryptor()){return encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);}}}static string DecryptDES(byte[] encryptedData, string key){byte[] keyBytes = Encoding.UTF8.GetBytes(key);using (DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider()){cryptoProvider.Key = keyBytes;cryptoProvider.Mode = CipherMode.ECB;using (ICryptoTransform decryptor = cryptoProvider.CreateDecryptor()){byte[] plainBytes = decryptor.TransformFinalBlock(encryptedData, 0, encryptedData.Length);return Encoding.UTF8.GetString(plainBytes);}}}
}

上述代码首先使用密钥和明文数据调用EncryptDES方法进行加密,然后使用密钥和加密数据调用DecryptDES方法进行解密。

在这里插入图片描述

2.2 AES加密算法

AES(Advanced Encryption Standard)是一种对称加密算法,它使用128、192或256位密钥对数据进行加密和解密。下面是一个使用AES加密算法的示例:

using System;
using System.Security.Cryptography;
using System.Text;public class Program
{static void Main(string[] args){string plainText = "Hello, World!";string key = "mysupersecretkey";byte[] encryptedData = EncryptAES(plainText, key);string decryptedData = DecryptAES(encryptedData, key);Console.WriteLine($"Original data: {plainText}");Console.WriteLine($"Encrypted data: {Convert.ToBase64String(encryptedData)}");Console.WriteLine($"Decrypted data: {decryptedData}");}static byte[] EncryptAES(string plainText, string key){byte[] keyBytes = Encoding.UTF8.GetBytes(key);byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);using (AesCryptoServiceProvider cryptoProvider = new AesCryptoServiceProvider()){cryptoProvider.Key = keyBytes;cryptoProvider.GenerateIV();byte[] iv = cryptoProvider.IV;using (ICryptoTransform encryptor = cryptoProvider.CreateEncryptor()){byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);byte[] encryptedData = new byte[encryptedBytes.Length + iv.Length];Array.Copy(iv, 0, encryptedData, 0, iv.Length);Array.Copy(encryptedBytes, 0, encryptedData, iv.Length, encryptedBytes.Length);return encryptedData;}}}static string DecryptAES(byte[] encryptedData, string key){byte[] keyBytes = Encoding.UTF8.GetBytes(key);using (AesCryptoServiceProvider cryptoProvider = new AesCryptoServiceProvider()){int ivSize = cryptoProvider.BlockSize / 8;byte[] iv = new byte[ivSize];Array.Copy(encryptedData, 0, iv, 0, ivSize);cryptoProvider.Key = keyBytes;cryptoProvider.IV = iv;using (ICryptoTransform decryptor = cryptoProvider.CreateDecryptor()){byte[] encryptedBytes = new byte[encryptedData.Length - ivSize];Array.Copy(encryptedData, ivSize, encryptedBytes, 0, encryptedBytes.Length);byte[] plainBytes = decryptor.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length);return Encoding.UTF8.GetString(plainBytes);}}}
}

上述代码首先使用密钥和明文数据调用EncryptAES方法进行加密,然后使用密钥和加密数据调用DecryptAES方法进行解密。AES加密算法还需要使用一个初始化向量(IV),它用于增加加密的随机性。
在这里插入图片描述


3. 非对称加密算法

非对称加密算法使用一对公钥和私钥来进行加密和解密。下面是C#中经常使用的非对称加密算法:

3.1 RSA加密算法

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它使用公钥对数据进行加密,使用私钥对数据进行解密。下面是一个使用RSA加密算法的示例:

using System;
using System.Security.Cryptography;
using System.Text;public class Program
{static void Main(string[] args){string plainText = "Hello, World!";byte[] encryptedData = EncryptRSA(plainText);string decryptedData = DecryptRSA(encryptedData);Console.WriteLine($"Original data: {plainText}");Console.WriteLine($"Encrypted data: {Convert.ToBase64String(encryptedData)}");Console.WriteLine($"Decrypted data: {decryptedData}");}static byte[] EncryptRSA(string plainText){using (RSACryptoServiceProvider cryptoProvider = new RSACryptoServiceProvider()){byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);return cryptoProvider.Encrypt(plainBytes, true);}}static string DecryptRSA(byte[] encryptedData){using (RSACryptoServiceProvider cryptoProvider = new RSACryptoServiceProvider()){byte[] plainBytes = cryptoProvider.Decrypt(encryptedData, true);return Encoding.UTF8.GetString(plainBytes);}}
}

上述代码首先使用公钥对明文数据调用EncryptRSA方法进行加密,然后使用私钥和加密数据调用DecryptRSA方法进行解密。
在这里插入图片描述


4. 散列算法

散列算法将任意长度的数据转换为固定长度的哈希值。下面是C#中经常使用的散列算法:

4.1 MD5散列算法

MD5(Message Digest Algorithm 5)是一种常见的散列算法,它将任意长度的数据转换为128位的哈希值。下面是一个使用MD5散列算法的示例:

using System;
using System.Security.Cryptography;
using System.Text;public class Program
{static void Main(string[] args){string plainText = "Hello, World!";string hash = HashMD5(plainText);Console.WriteLine($"Original data: {plainText}");Console.WriteLine($"Hash value: {hash}");}static string HashMD5(string plainText){byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);using (MD5 cryptoProvider = new MD5CryptoServiceProvider()){byte[] hashBytes = cryptoProvider.ComputeHash(plainBytes);StringBuilder hashBuilder = new StringBuilder();foreach (byte b in hashBytes){hashBuilder.Append(b.ToString("x2"));}return hashBuilder.ToString();}}
}

上述代码使用HashMD5方法计算给定明文数据的哈希值,并将结果转换为16进制字符串。
在这里插入图片描述

4.2 SHA散列算法

SHA(Secure Hash Algorithm)是一系列散列算法,包括SHA-1、SHA-256、SHA-384和SHA-512。相比于MD5,SHA系列算法更安全。下面是一个使用SHA-256散列算法的示例:

using System;
using System.Security.Cryptography;
using System.Text;public class Program
{static void Main(string[] args){string plainText = "Hello, World!";string hash = HashSHA256(plainText);Console.WriteLine($"Original data: {plainText}");Console.WriteLine($"Hash value: {hash}");}static string HashSHA256(string plainText){byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);using (SHA256 cryptoProvider = new SHA256CryptoServiceProvider()){byte[] hashBytes = cryptoProvider.ComputeHash(plainBytes);StringBuilder hashBuilder = new StringBuilder();foreach (byte b in hashBytes){hashBuilder.Append(b.ToString("x2"));}return hashBuilder.ToString();}}
}

上述代码使用HashSHA256方法计算给定明文数据的哈希值,并将结果转换为16进制字符串。
在这里插入图片描述


5. 总结

本文详细介绍了C#中经常使用的加密和解密方法,包括对称加密算法(如DES和AES)、非对称加密算法(如RSA)以及散列算法(如MD5和SHA)。通过合理选择适合场景的加密算法和方法,我们可以有效地保护数据的安全性和保密性。希望本文对你在C#开发中使用加密解密方法有所帮助。

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

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

相关文章

QT设置鼠标样式 QWidget::setCusor()

1、使用Qt内置鼠标样式 例如手型: button->setCursor(Qt::PointingHandCursor); 其他类型: 2.自定义鼠标样式3种方式: 2.1.使用函数生成鼠标样式的图片 2.2使用画图工具生成鼠标样式的图片 2.3使用XPM生成鼠标样式 这三种方式参考&…

「吞噬星空」黑龙飞船售128亿,罗峰晋级恒星买地球,大危机降至

Hello,小伙伴们,我是拾荒君。 《吞噬星空》的国漫第98集已经更新,如同众多的粉丝一样,拾荒君也迫不及待地观看了这一集。在这一集中,布罗临死前向诺岚山家族透露了地球的坐标,这一举动无疑将地球暴露在了危险之中。现…

[笔记] linux 4.19 版本 Kbuild 编译流程解析

目录 写在前面与一些说明linux 编译工程框架 KbuildTop-Makefile 文件 linux 编译命令make helpdistclean 目标defconfig 目标build 变量与 $(build)dir 赋值使用 obj 变量实现包含目标模块下的 makefiledefconfig 规则展开defconfig 的生成命令解析 make 默认目标生成 image.g…

万户OA text2Html接口存在任意文件读取漏洞

文章目录 产品简介漏洞概述指纹识别漏洞利用修复建议 产品简介 ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网…

喜报!巨蟹数科荣获国家“高新技术企业”认定!

根据《高新技术企业认定管理办法》(国科发火〔2016〕32 号)和《高新技术企业认定管理工作指引》(国科发火〔 2016〕195号)有关规定,经省高新技术企业认定管理机构组织企业申请、专家评审等程序,并经全国高新…

Netty应用(七) ----MQTT编解码器

目录 0.前言1. MqttEncoder--编码器1.1 构造方法1.2 encodeConnectMessage -- 连接消息1.3 encodeConnAckMessage - 确认连接1.4 encodePublishMessage -- 发布消息1.5 encodeSubscribeMessage - 订阅主题1.6 encodeUnsubscribeMessage - 取消订阅1.7 encodeSubAckMessage - 订…

关于“Python”的核心知识点整理大全28

目录 11.1.5 添加新测试 11.2 测试类 11.2.1 各种断言方法 unittestModule中的断言方法: ​编辑11.2.2 一个要测试的类 survey.py language_survey.py 11.2.3 测试 AnonymousSurvey 类 test_survey.py 往期快速传送门👆(在文章最后&…

Redis7--基础篇9(SpringBoot集成Redis)

1. jedis、lettuce、Redistemplate的关系 第一代为jedis,之后推出了lettuce,然后springboot继承了Redistemplate,现推荐使用Redistemplate。 总的来说,jedis、lettuce、Redistemplate都是java操作Redis数据库的驱动。 2. 本地Ja…

3700字!我这样的爬虫架构,如履薄冰

前言 在毕业设计中,用Java写下了第一个爬虫。2019年工作之后,从Python的requests原生爬虫库,学到分布式爬虫框架Scrapy,写了60个左右爬虫。然后写了十几篇有关于爬虫的文章。但大多都是围绕着程序设计、功能模块的角度写的&#…

【记录版】SpringBoot项目自动配置场景下查看Bean的定义

SpringBoot BeanDefinition 背景: 最近在看一些SpringBoot相关的一些源码框架,自从SpringBoot实现自动化配置后,很多框架的适配和实现对我们来说都是黑盒,我们不知道某个框架到底注册了多个容器实例,以及定位的位置在…

时尚炫酷动态图文幻灯片视频素材AE模板

这个After Effects模板以时尚和动态幻灯片为特色。可以编辑和自定义文本占位符、媒体占位符和颜色。用来展示照片或视频剪辑。不需要任何插件。 来自AE模板网:https://aemuban.com/28093.html

NineData成功举办|《国产数据库共话未来趋势》技术沙龙

12月16日周六下午,由NineData、PostgreSQL中文社区、PolarDB开源社区共同举办的《国产数据库共话未来趋势》技术沙龙,在NineData的报告厅成功举办。 《国产数据库共话未来趋势》技术沙龙合影 本次沙龙汇聚阿里云、玖章算术、百度云、飞轮科技、YMatrix、…