C#开发中常用的加密解密方法汇总

C#开发中常用的加密解密方法汇总

本文将介绍一些在C#开发中常用的加密解密方法,包括对称加密、非对称加密、哈希函数等。这些方法可以用于数据安全存储、传输以及验证等场合。

对称加密

对称加密算法使用相同的密钥进行加密和解密,主要有以下几种常用方法:

1. DES加密算法

DES加密算法是一种对称加密算法,具有较高的安全性能。下面是一个简单的DES加密示例:

using System.Security.Cryptography;

public static string DesEncrypt(string text, string key)
{
    var des = new DESCryptoServiceProvider(); // 创建DES实例
    byte[] inputByteArray = Encoding.UTF8.GetBytes(text); // 获得字节数组
    des.Key = Encoding.UTF8.GetBytes(key);  // 计算密钥
    des.IV = Encoding.UTF8.GetBytes(key);  // 设置向量
    var ms = new MemoryStream(); // 创建内存流
    var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);  // 创建加密流
    cs.Write(inputByteArray, 0, inputByteArray.Length); // 加密数据
    cs.FlushFinalBlock(); // 完成加密
    return Convert.ToBase64String(ms.ToArray());  // 将加密数据转换为base64格式输出
}

2. AES加密算法

AES加密算法是DES算法的改进版本,速度更快,安全性更高。以下是一个AES加密示例:

using System.Security.Cryptography;

public static string AesEncrypt(string text, string key)
{
    var aes = new AesCryptoServiceProvider(); // 创建AES实例
    aes.Key = Encoding.UTF8.GetBytes(key); // 计算密钥
    aes.IV = Encoding.UTF8.GetBytes(key);  // 设置向量
    var inputByteArray = Encoding.UTF8.GetBytes(text); // 获得字节数组
    var ms = new MemoryStream(); // 创建内存流
    var cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write); // 创建加密流
    cs.Write(inputByteArray, 0, inputByteArray.Length); // 加密数据
    cs.FlushFinalBlock(); // 完成加密
    return Convert.ToBase64String(ms.ToArray()); // 将加密数据转换为base64格式输出
}

非对称加密

非对称加密算法使用公钥加密和私钥解密,或者使用私钥加密和公钥解密。以下是RSA非对称加密算法的示例:

using System.Security.Cryptography;

public static string RsaEncrypt(string text, string publicKeyXml)
{
    var rsa = new RSACryptoServiceProvider();
    rsa.FromXmlString(publicKeyXml); // 加载公钥
    var inputByteArray = Encoding.UTF8.GetBytes(text); // 获得字节数组
    var encryptedData = rsa.Encrypt(inputByteArray, false); // 使用公钥进行加密
    return Convert.ToBase64String(encryptedData); // 将加密数据转换为base64格式输出
}

哈希函数

哈希函数是一种将任意长度的输入消息转换成固定长度的输出消息的函数,常用于验证数据完整性。以下是MD5哈希函数的示例:

using System.Security.Cryptography;

public static string Md5Hash(string text)
{
    var md5 = MD5.Create(); // 创建MD5实例
    var inputByteArray = Encoding.UTF8.GetBytes(text); // 获得字节数组
    var hashedData = md5.ComputeHash(inputByteArray); // 计算哈希值
    var sb = new StringBuilder(); // 创建字符串构建器
    for (int i = 0; i < hashedData.Length; i++)
    {
        sb.Append(hashedData[i].ToString("x2")); // 将哈希值转换为16进制字符串
    }
    return sb.ToString(); // 返回哈希值的字符串表示形式
}

总结

本文介绍了在C#开发中常用的加密解密方法,包括对称加密算法、非对称加密算法以及哈希函数。这些方法可以用于保护数据安全、验证数据完整性等场合。使用这些加密解密算法可以帮助保护用户隐私,保证系统安全性。

示例1:

string originalText = "Hello world!";
string key = "1234567890123456";
string desEncryptedText = DesEncrypt(originalText, key);
string aesEncryptedText = AesEncrypt(originalText, key);
Console.WriteLine($"DES encrypted text: {desEncryptedText}");
Console.WriteLine($"AES encrypted text: {aesEncryptedText}");

输出结果:

DES encrypted text: BF4lTpA62j8Qi8yD56g7QQ==
AES encrypted text: ETJiYv6d91pZ7J259FDGpQ==

示例2:

string originalText = "Hello world!";
string publicKeyXml = "<RSAKeyValue><Modulus>s6x1fLQ2GC6...</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
string encryptedText = RsaEncrypt(originalText, publicKeyXml);
Console.WriteLine($"RSA encrypted text: {encryptedText}");

输出结果:

RSA encrypted text: F/kIl0S3hADUgUObpRXE4v6kH2X8ddZ...

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#开发中常用的加密解密方法汇总 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • ASP.NET 多附件上传实现代码

    介绍ASP.NET多附件上传的完整攻略如下: 1. 需求分析与准备工作 首先我们需要明确自己的需求,了解自己要实现的是什么样的多附件上传操作。确定需求后,我们需要准备工作,主要包括: 确定上传文件大小:根据需求,确定上传文件的最大大小,避免上传过大的文件导致服务器崩溃。 创建上传文件夹:我们需要在服务器上创建一个专门存储上传文件的文件夹,以便于整理和管理上传…

    C# 2023年5月31日
    00
  • 预处理器指令

    概述 预处理器指令 指导编译器在实际编译之前对信息进行预处理。 所有预处理指令以#开始。并由于预处理器指令不是语句,所以没有分号作为结尾。 一个预处理器指令,一定是这一行的唯一指令。 预处理指令列表 预处理器指令 描述 #define 将其后的一系列 成为符号 undef 取消定义的符号 if 测试符号是否为真 else 和if一起使用 endif 指定一个…

    C# 2023年5月11日
    00
  • .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx)

    在.NET Core部署到linux(CentOS)最全解决方案,常规篇一文,我们详细讲解了传统的.NET Core部署到Linux服务器的方法,学到了Linux在虚拟机下的安装、Xshell,Xftp的使用方法、git在linux下的交互使用以及.net core在linux下的发布与运行全过程。本文讲讲解通过使用Supervisor+Nginx的组合来实…

    C# 2023年4月30日
    00
  • VB.net读取Word文档属性的方法

    下面是VB.net读取Word文档属性的方法的完整攻略: 一、需求背景 在处理Word文档时,我们可能会需要读取文档的一些属性,比如文档名称、创建时间、最后修改时间等信息。那么,如何在VB.net中获取这些属性呢?接下来,我们将一步一步展开详细讲解。 二、获取Word文档属性的方法 在VB.net中,获取Word文档属性有多种方法,这里我们介绍其中两种: 1…

    C# 2023年5月31日
    00
  • C#实现斐波那契数列的几种方法整理

    C#实现斐波那契数列的几种方法整理 什么是斐波那契数列 斐波那契数列是一个非常著名的数列,其前两项是0和1,后续项是前两项之和,即: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … 方法一:递归 递归是一种自上而下的方式解决问题,可以很自然地实现斐波那契数列。 public static int Fibonacci(int n) {…

    C# 2023年6月7日
    00
  • PowerShell小技巧之执行SOAP请求

    PowerShell小技巧之执行SOAP请求 PowerShell是一种跨平台的任务自动化和配置管理框架,可以用于执行各种任务。在PowerShell中,可以使用Invoke-WebRequest cmdlet来执行SOAP请求。本文将提供详细的“PowerShell小技巧之执行SOAP请求”的完整攻略,包括如何使用Invoke-WebRequest cmd…

    C# 2023年5月15日
    00
  • C#验证给定字符串是否为数字的方法

    下面是详细的C#验证给定字符串是否为数字的方法攻略: 方法一:使用int.TryParse方法 int.TryParse方法可以将字符串转换为整型变量,如果转换成功则返回true,否则返回false。因此,我们可以利用这个方法来检查输入的字符串是否是数字。 下面是示例代码: string inputString = "12345"; in…

    C# 2023年6月8日
    00
  • C#调用系统API指定快捷键的方法

    下面是详细的讲解“C#调用系统API指定快捷键的方法”的完整攻略。 1. 确定快捷键 在使用系统API指定快捷键之前,我们需要先确定需要指定的快捷键。快捷键通常由按键、修饰键(如Ctrl、Alt、Shift等)和热键消息(如WM_HOTKEY)组成。其中,按键可以是任意一个普通按键(如字母、数字、符号等),修饰键可以是Ctrl、Alt、Shift或这些修饰键…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部