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日

相关文章

  • web 容器的设计如何实现

    Web 容器是指可以在其中运行 Web 应用程序的软件环境,它负责处理用户的 HTTP 请求并返回 HTTP 响应。Web 容器设计的核心是它的请求处理机制,实现 Web 容器的设计需要考虑以下几个方面。 设计 Web 容器的工作流程 Web 容器处理 HTTP 请求的基本流程是:接收请求、解析请求、调度资源、执行响应、发送结果。 接收请求:Web 容器需要…

    C# 2023年6月6日
    00
  • C#实现FFT(递归法)的示例代码

    关于“C#实现FFT(递归法)的示例代码”的完整攻略,我将为你提供以下内容: 1. 什么是FFT?什么是递归法? 在开始之前,我们先简单了解一下FFT和递归法: FFT是快速傅里叶变换的缩写,是一种对离散信号进行频域分析的方法,常用来处理数字信号和图像处理。 而递归法是指在算法中调用自身函数的技术,把大问题分解成更小的同类问题来解决,每分解一次问题规模就会减…

    C# 2023年6月6日
    00
  • C#中可枚举类型详解

    C#中可枚举类型详解 概述 C#中的枚举类型是一种特殊的值类型,用于定义一组相关的命名常量。枚举类型的成员可以是数字常量、字符串常量等,它为开发人员提供了一种更加方便、更加具有可读性和可维护性的编程方式。 定义枚举类型 在C#中定义枚举类型非常简单,只需要使用enum关键字即可。 enum WeekDay { Monday, Tuesday, Wednesd…

    C# 2023年5月31日
    00
  • Unity 使用tiledmap解析地图的详细过程

    下面我将为你详细讲解Unity使用TiledMap解析地图的详细过程。 1. 安装TiledMap插件 首先需要在Unity中安装TiledMap插件,步骤如下: 进入Unity Asset Store,搜索“Tiled2Unity”并下载安装。 安装完成后,在Unity的菜单栏中选择“Tiled2Unity” > ”Import Tiled Map“…

    C# 2023年6月3日
    00
  • C#开发Winform程序调用存储过程

    首先我们来讲解一下C#开发Winform程序调用存储过程的攻略。 1. 连接数据库 在使用存储过程之前,我们需要先连接数据库。通常我们使用SqlClient命名空间下的SqlConnection对象来连接SQL Server数据库。 using System.Data.SqlClient; string connectionString = "Da…

    C# 2023年6月7日
    00
  • 浅谈static a[n*m]={0};中static的作用

    我们来详细讲解一下在C/C++中,声明静态数组时使用static关键字的作用。 首先,我们需要明确一下,在C/C++中,静态数组有以下两种声明方式: 通过在函数中声明静态数组 void myFunction(){ static int arr[10] = {0}; // do something with arr } 在文件的全局作用域中声明静态数组 sta…

    C# 2023年5月15日
    00
  • WinForm调用jar包的方法分析

    WinForm是一种Windows桌面应用程序开发框架,而Java的jar包是一种Java程序打包方式。在WinForm应用程序中,我们可能需要调用Java的jar包来实现某些功能。本文将提供详解“WinForm调用jar包的方法分析”的完整攻略,包括如何将Java的jar包添加到WinForm项目中、如何在WinForm中调用Java的jar包等。 将Ja…

    C# 2023年5月15日
    00
  • C#获取客户端相关信息实例总结

    C#获取客户端相关信息实例总结 本文将介绍如何使用 C# 来获取客户端机器的相关信息。我们将涵盖以下主题: 如何获取客户端机器的 IP 地址。 如何获取客户端机器的 MAC 地址。 如何获取客户端机器的计算机名称。 如何获取客户端机器的浏览器信息。 获取客户端机器的 IP 地址 C# 中获取客户端机器的 IP 地址主要通过获取请求头信息中的 RemoteAd…

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