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日

相关文章

  • sql字符串函数大全和使用方法示例

    SQL字符串函数是SQL语言中的一类函数,用于处理字符串类型的数据。这些函数可以用于字符串的拼接、截取、替换、转换等操作。本文将介绍SQL字符串函数的大全和使用方法示例。 SQL字符串函数大全 以下是SQL字符串函数的大全: CONCAT:用于将两个或多个字符串连接在一起。 SUBSTRING:用于从字符串中提取子字符串。 REPLACE:用于将字符串中的一…

    C# 2023年5月15日
    00
  • 使用typescript改造koa开发框架的实现

    使用Typescript改造Koa开发框架的实现可以带来更好的可维护性和可读性。下面是一些完整的攻略: 步骤一:安装依赖 全局安装TypeScript npm install -g typescript 安装所需的依赖 npm install –save-dev @types/koa @types/node koa koa-router typescrip…

    C# 2023年6月3日
    00
  • Unity调用打印机打印图片

    关于“Unity调用打印机打印图片”的完整攻略,我将分为以下几个部分详细介绍: 需求分析 Unity调用打印机的底层实现原理 Unity调用打印机打印图片的具体操作步骤 示例演示 需求分析 在我们的日常项目中,可能会有需要在Unity3d中实现打印图片的需求,例如实现游戏中的截图功能,或者游戏中的特定场景需要将当前画面截取下来并打印出来。因此,本文将介绍如何…

    C# 2023年5月15日
    00
  • 【代码设计】C# 实现 AOP 面向切面编程

        简单记录一下对AOP的认识,正文为3个部分     一、AOP由来     二、用DispatchProxy动态代理实现AOP     三、通过特性标记,处理多种不同执行前、执行后的逻辑编排   一、AOP 由来 IUserHelper userHelper = new CommonUserHelper(); // commonUser.Create…

    C# 2023年4月18日
    00
  • 探讨Object转为String的几种简易形式详解

    关于“探讨Object转为String的几种简易形式详解”的完整攻略,我们可以以以下结构来进行讲解: 探讨 Object 转为 String 的几种简易形式详解 一、Object 转 String 的默认形式 我们首先需要明确的是,当一个 Object 转为 String 时,会有一个默认的转换方式。这个过程可以通过 Object 中的 toString()…

    C# 2023年5月15日
    00
  • 用C#中的params关键字实现方法形参个数可变

    使用params关键字可以实现C#中方法形参个数可变。在方法的参数列表中,可以在最后一个参数前添加params关键字,这个参数就会成为可变参数,允许传递多个同类型的值,并把它们打包成一个数组。下面是具体的步骤: 1.在方法定义时,在最后一个参数前添加params关键字,表示该参数可以传递多个同类型的值。 2.在方法内部,使用该参数时,直接把该参数当成数组来使…

    C# 2023年6月8日
    00
  • C#求解哈夫曼树,实例代码

    C#求解哈夫曼树,实例代码 什么是哈夫曼树? 哈夫曼树是一种二叉树,它的权值在叶子节点处,而非根节点处。它是一种带权路径长度最短的树,被广泛应用在文件压缩和编码中。 求解哈夫曼树的过程 求解哈夫曼树的过程分为三步: 构建森林:将每一个权值看做一个点,将所有点作为森林的初始状态。 构建哈夫曼树:对于森林中的每一对最小权值节点,合并它们并将合并后的点重新放回森林…

    C# 2023年5月31日
    00
  • 深入反射生成数组的详解

    深入反射生成数组的详解 本文将详细介绍如何使用反射生成数组。反射是 Java 中非常有用的一个特性,可以在运行时获取和操作类的信息。数组作为 Java 中最基本的数据结构之一,对于开发人员来说也是非常重要的。通过反射生成数组的方式可以提高代码的灵活性和可重用性。 获取 Class 对象 在使用反射生成数组之前,需要先获取 Class 对象。可以通过多种方式获…

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