C#开发中经常用的加密解密方法示例

下面是“C#开发中经常用的加密解密方法示例”的完整攻略:

1. 加密解密方法

在C#开发中经常用到的加密解密方法有:哈希加密、对称加密和非对称加密。

哈希加密

哈希加密是指将任意长度的二进制值映射成固定长度的较小二进制值的过程,其特点是不可逆。C#中经常使用的哈希加密方法有MD5、SHA1、SHA256等。下面是一个MD5加密的示例代码:

using System.Security.Cryptography;
using System.Text;

public static string GetMD5(string source)
{
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] bytes = Encoding.UTF8.GetBytes(source);
    byte[] result = md5.ComputeHash(bytes);
    StringBuilder sb = new StringBuilder();
    foreach (byte b in result)
    {
        sb.Append(b.ToString("x2"));
    }
    return sb.ToString();
}

在示例代码中,首先创建MD5加密算法的实例,然后将待加密字符串转换成字节数组,利用ComputeHash方法计算MD5值,最后将MD5值转换成16进制字符串返回。

对称加密

对称加密是指使用同一个密钥进行加密和解密的加密方式。C#中经常使用的对称加密方法有AES、DES等。下面是一个AES加密的示例代码:

using System.Security.Cryptography;
using System.Text;

public static string AESEncrypt(string source, string key)
{
    byte[] bytes = Encoding.UTF8.GetBytes(source);
    byte[] keyBytes = Encoding.UTF8.GetBytes(key);
    using (var aes = Aes.Create())
    {
        aes.Padding = PaddingMode.PKCS7;
        aes.Key = keyBytes;
        aes.IV = keyBytes;
        using (var msEncrypt = new MemoryStream())
        {
            using (var csEncrypt = new CryptoStream(msEncrypt, aes.CreateEncryptor(), CryptoStreamMode.Write))
            {
                csEncrypt.Write(bytes, 0, bytes.Length);
            }
            return Convert.ToBase64String(msEncrypt.ToArray());
        }
    }
}

public static string AESDecrypt(string source, string key)
{
    byte[] bytes = Convert.FromBase64String(source);
    byte[] keyBytes = Encoding.UTF8.GetBytes(key);
    using (var aes = Aes.Create())
    {
        aes.Padding = PaddingMode.PKCS7;
        aes.Key = keyBytes;
        aes.IV = keyBytes;
        using (var msDecrypt = new MemoryStream(bytes))
        {
            using (var csDecrypt = new CryptoStream(msDecrypt, aes.CreateDecryptor(), CryptoStreamMode.Read))
            {
                using (var srDecrypt = new StreamReader(csDecrypt))
                {
                    return srDecrypt.ReadToEnd();
                }
            }
        }
    }
}

在示例代码中,首先将待加密字符串和密钥转换成字节数组,然后创建AES加密算法的实例,并设置PaddingMode和Key、IV等参数。利用CreateEncryptor方法创建加密流,将待加密字符串写入加密流,得到密文。对于解密,需要先将密文转换成字节数组,然后创建AES解密算法的实例,并设置PaddingMode和Key、IV等参数。利用CreateDecryptor方法创建解密流,将密文写入解密流,得到原始字符串。

非对称加密

非对称加密是指使用一对公钥和私钥进行加密和解密的加密方式。C#中经常使用的非对称加密方法有RSA等。下面是一个RSA加密的示例代码:

using System.Security.Cryptography;
using System.Text;

public static string RSAEncrypt(string source, string publicKey)
{
    byte[] bytes = Encoding.UTF8.GetBytes(source);
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.FromXmlString(publicKey);
        byte[] resultBytes = rsa.Encrypt(bytes, false);
        return Convert.ToBase64String(resultBytes);
    }
}

public static string RSADecrypt(string source, string privateKey)
{
    byte[] bytes = Convert.FromBase64String(source);
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.FromXmlString(privateKey);
        byte[] resultBytes = rsa.Decrypt(bytes, false);
        return Encoding.UTF8.GetString(resultBytes);
    }
}

在示例代码中,首先将待加密字符串转换成字节数组,然后创建RSA加密算法的实例,并将公钥字符串转换成RSA格式。使用Encrypt方法对待加密字符串进行加密,并将结果转换成Base64字符串返回。对于解密,需要先将密文字符串转换成字节数组,然后创建RSA解密算法的实例,并将私钥字符串转换成RSA格式。使用Decrypt方法对密文字符串进行解密,并将结果转换成字符串返回。

2. 示例说明

针对以上加密解密方法,下面简单演示哈希加密方法的使用示例。

string source = "Hello, world!";
string md5 = GetMD5(source);
Console.WriteLine($"MD5({source}) = {md5}");

在示例代码中,首先定义待加密字符串,然后调用GetMD5方法计算MD5值,并输出结果。

输出结果如下:

MD5(Hello, world!) = ed076287532e86365e841e92bfc50d8c

以上是“C#开发中经常用的加密解密方法示例”的完整攻略,包括加密解密方法的介绍和示例说明。希望对您有所帮助。

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

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

相关文章

  • Silverlight中同步调用WebClient的解决办法,是同步!

    在Silverlight中,WebClient是一个常用的类,用于从Web服务器下载数据。默认情况下,WebClient使用异步方式下载数据,这意味着下载操作将在后台线程中执行,而不会阻塞UI线程。但是,在某些情况下,我们可能需要使用同步方式下载数据,以便在下载完成之前阻塞UI线程。本文将介绍如何在Silverlight中同步调用WebClient,并提供两…

    C# 2023年5月15日
    00
  • C#如何利用结构体对固定格式数据进行解析

    下面是关于C#如何利用结构体对固定格式数据进行解析的完整攻略: 什么是结构体? 结构体是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起。结构体的格式定义为: struct 结构体名称 { 变量1类型 变量1名称; 变量2类型 变量2名称; //… } 利用结构体解析固定格式数据 当我们接收到固定格式的数据流时,通常需要将其解析为具体的数据类型…

    C# 2023年5月15日
    00
  • ASP.NET MVC把数据库中枚举项的数字转换成文字

    以下是“ASP.NET MVC把数据库中枚举项的数字转换成文字”的完整攻略: 什么是枚举 枚举是一种特殊的数据类型,它定义了一组命名的常量。在.NET MVC中,枚举通常用于表示状态、类型等。 ASP.NET MVC把数据库中枚举项的数字转换成文字的过程 以下ASP.NET MVC把数据库中枚举项的数字转换成文字的详细过程: 步骤1:定义枚举 首先,我们需要…

    C# 2023年5月12日
    00
  • C#把DataTable导出为Excel文件

    关于如何使用C#把DataTable导出为Excel文件,下面是一份详细的攻略: 1. 添加依赖库 使用Excel需要引入Office.dll,如果没有安装Microsoft Office,可以通过NuGet安装Microsoft.Office.Interop.Excel: Install-Package Microsoft.Office.Interop.E…

    C# 2023年5月31日
    00
  • MVC设定默认路由为指定的Area下的某个action

    MVC(Model-View-Controller)是一种软件架构模式,常用于Web开发中,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。 在MVC中,URL是用来唯一标识一个请求的,它包括协议、主机名、端口号、路径和查询字符串等部分。对于一个MVC应用来说,URL中的路径一般都会映射到一个特定的控制器的…

    C# 2023年5月31日
    00
  • 详解最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)

    详解最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三) 简介 在使用 .NET 进行开发时,经常需要进行文件压缩和解压缩操作。而 ZIP 文件是比较常见的一种文件格式。在 .NET 中,我们可以使用 System.IO.Compression 命名空间下的类进行 ZIP 文件的操作。不过,这些类并不是特别完备,对于一些高级的操作,我们需…

    C# 2023年6月3日
    00
  • ASP.NET如何自定义项目模板详解

    ASP.NET如何自定义项目模板详解 ASP.NET是一个动态站点开发工具,它可以帮助开发者快速构建Web应用程序。ASP.NET允许开发者自定义项目模板,以便在日常开发中提高工作效率。本文将介绍如何自定义ASP.NET项目模板,以及如何使用自定义项目模板。 1. 创建自定义项目模板 步骤如下: 在Visual Studio中创建一个新的ASP.NET项目。…

    C# 2023年6月3日
    00
  • C#线程执行超时处理与并发线程数控制实例

    首先,我们需要明确一下本篇攻略的主要内容,即是如何应对C#程序中的线程执行超时问题以及控制并发线程数。接下来,我们将分几个方面来逐一介绍相关的方法和实例。 线程执行超时处理 在C#多线程编程中,一个常见的问题就是线程运行时间过长导致程序性能下降或死锁。为了解决这个问题,我们可以使用一个超时处理机制,即线程运行时间超过一定时间就强制终止线程,避免出现程序僵死的…

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