C#实现加密与解密详解

C#实现加密与解密详解

在C#开发中,我们常常需要对某些敏感数据进行加密处理,以保证数据的安全性。本文将详细讲解C#实现加密与解密的方法,包括对称加密、非对称加密和哈希算法的讲解,并提供示例代码演示。

对称加密

对称加密是指使用相同的密钥进行加密和解密的加密方式。常见的对称加密算法有DES、AES等。下面是使用AES加密的示例代码:

using System;
using System.IO;
using System.Security.Cryptography;

public static class AesHelper
{
    public static byte[] Encrypt(string plainText, byte[] key, byte[] iv)
    {
        byte[] encrypted;
        using (Aes aes = Aes.Create())
        {
            aes.Key = key;
            aes.IV = iv;

            ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter sw = new StreamWriter(cs))
                    {
                        sw.Write(plainText);
                    }
                    encrypted = ms.ToArray();
                }
            }
        }

        return encrypted;
    }

    public static string Decrypt(byte[] cipherText, byte[] key, byte[] iv)
    {
        string plaintext = null;

        using (Aes aes = Aes.Create())
        {
            aes.Key = key;
            aes.IV = iv;

            ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

            using (MemoryStream ms = new MemoryStream(cipherText))
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader reader = new StreamReader(cs))
                    {
                        plaintext = reader.ReadToEnd();
                    }
                }
            }
        }

        return plaintext;
    }
}

以上代码中的 Encrypt 方法接收一个明文字符串、一个密钥和一个初始化向量(IV),并返回加密后的字节数组。Decrypt 方法接收一个密文字节数组、一个密钥和一个初始化向量,并返回解密后的明文字符串。

下面是使用上述示例代码对字符串进行加密和解密的示例:

string plainText = "Hello, world!";
byte[] key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
byte[] iv = new byte[] { 17, 18, 19, 20, 21, 22, 23, 24 };

byte[] encrypted = AesHelper.Encrypt(plainText, key, iv);
string decrypted = AesHelper.Decrypt(encrypted, key, iv);

Console.WriteLine("Plain text: {0}", plainText);
Console.WriteLine("Encrypted text: {0}", Convert.ToBase64String(encrypted));
Console.WriteLine("Decrypted text: {0}", decrypted);

非对称加密

非对称加密是指使用公钥加密、私钥解密或使用私钥签名、公钥验证的加密方式。常见的非对称加密算法有RSA、ECC等。下面是一个使用RSA加密和解密的示例代码:

using System;
using System.Security.Cryptography;

public static class RsaHelper
{
    public static byte[] Encrypt(byte[] data, RSAParameters publicKey)
    {
        using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
        {
            rsa.ImportParameters(publicKey);
            return rsa.Encrypt(data, true);
        }
    }

    public static byte[] Decrypt(byte[] data, RSAParameters privateKey)
    {
        using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
        {
            rsa.ImportParameters(privateKey);
            return rsa.Decrypt(data, true);
        }
    }
}

以上示例代码中的 Encrypt 方法接收一个字节数组和一个公钥参数,返回加密后的字节数组。Decrypt 方法接收一个字节数组和一个私钥参数,并返回解密后的字节数组。

下面是使用上述示例代码对字符串进行加密和解密的示例:

string plainText = "Hello, world!";
byte[] data = System.Text.Encoding.UTF8.GetBytes(plainText);

using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
    byte[] encrypted = RsaHelper.Encrypt(data, rsa.ExportParameters(false));
    byte[] decrypted = RsaHelper.Decrypt(encrypted, rsa.ExportParameters(true));

    Console.WriteLine("Plain text: {0}", plainText);
    Console.WriteLine("Encrypted text: {0}", Convert.ToBase64String(encrypted));
    Console.WriteLine("Decrypted text: {0}", System.Text.Encoding.UTF8.GetString(decrypted));
}

哈希算法

哈希算法是一种将任意长度的消息压缩到固定长度的消息摘要的算法。哈希算法的特点是不可逆,相同的输入必定会得到相同的输出。常见的哈希算法有MD5、SHA-1、SHA-256等。下面是使用SHA-256算法计算消息摘要的示例代码:

using System;
using System.Security.Cryptography;

public static class Sha256Helper
{
    public static byte[] ComputeHash(byte[] data)
    {
        using (SHA256 sha256 = SHA256.Create())
        {
            return sha256.ComputeHash(data);
        }
    }
}

以上示例代码中的 ComputeHash 方法接收一个字节数组,返回计算出的SHA-256消息摘要的字节数组。下面是使用上述示例代码计算字符串的SHA-256消息摘要的示例:

string plainText = "Hello, world!";
byte[] data = System.Text.Encoding.UTF8.GetBytes(plainText);
byte[] hash = Sha256Helper.ComputeHash(data);

Console.WriteLine("Plain text: {0}", plainText);
Console.WriteLine("Hash: {0}", Convert.ToBase64String(hash));

以上就是本文对C#实现加密与解密的详细讲解和示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现加密与解密详解 - Python技术站

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

相关文章

  • Entity Framework代码优先Code First入门

    实体框架代码优先 – Code First 入门 实体框架代码优先 (Code First) 是 Entity Framework 中一种重要且高级的特性,它使用 C# 或 VB.NET 代码来定义数据模型,自动创建数据库和表之间的映射。本文将介绍如何入门实体框架代码优先,其中包括以下几个步骤: 安装 Entity Framework NuGet 包 创建数…

    C# 2023年6月3日
    00
  • C#创建自定义控件及添加自定义属性和事件使用实例详解

    很高兴听到您对C#创建自定义控件及添加自定义属性和事件使用实例的详细讲解感兴趣。那么我来为您详细讲解一下。 创建自定义控件 C#允许我们通过继承Control类来创建自定义控件。以下是创建自定义控件的步骤: 新建一个类,并将其继承自Control类。 public class MyCustomControl : Control { // 自定义控件的实现代码…

    C# 2023年6月7日
    00
  • 详解ASP.NET MVC3:Razor的@:和语法

    ASP.NET MVC3 是一种 Web 应用程序框架,可以帮助开发者快速构建 MVC(Model-View-Controller)模式的Web应用程序。而 Razor 是一种模板引擎,帮助开发者在视图(View)中方便地生成 HTML 代码。其中,@: 是 Razor 模板引擎中的一个语法,用于在视图中输出纯文本。 使用 @: @:语法可用于直接在 Raz…

    C# 2023年5月31日
    00
  • .Net Core解决WebAPI中返回时间格式带T的问题

    在本攻略中,我们将详细讲解如何在ASP.NET Core WebAPI中解决返回时间格式带T的问题,并提供两个示例说明。 步骤一:配置Json序列化选项 在ASP.NET Core WebAPI中解决返回时间格式带T的问题,您需要配置Json序列化选项。以下是一个示例: services.AddControllers() .AddJsonOptions(op…

    C# 2023年5月17日
    00
  • C#中对称加密算法的踩坑日常记录

    C#中对称加密算法的踩坑日常记录 引言 在 C# 中使用对称加密算法加密数据是一种常见的安全措施。本文将介绍在使用对称加密算法过程中踩坑的问题,并提供完整的攻略以帮助读者更好地理解和使用对称加密算法。 踩坑记录 问题1:数据加密后长度不一致 在使用对称加密算法加密数据时,有时会遇到数据加密后的长度与加密前不一致的问题。这是由于在进行对称加密时,加密算法会在原…

    C# 2023年5月15日
    00
  • 原生JS实现加载进度条

    原生JS实现加载进度条 在Web开发中,加载进度条是一个非常常见的功能。本文将介绍如何使用原生JS实现加载进度条。 步骤1:HTML结构 首先,我们需要在HTML中添加进度条的结构。可以在HTML文件中添加以下代码: <div id="progress-bar"> <div id="progress"…

    C# 2023年5月15日
    00
  • Docker容器运行ASP.NET Core的实现步骤

    下面是Docker容器运行ASP.NET Core的实现步骤: 1. 环境搭建 首先需要在本机上安装Docker。可以在Docker官网上下载对应操作系统的安装包,安装完成后启动Docker服务,并在终端中输入以下命令检查是否安装成功: docker version 此外还需要安装.NET Core SDK,去官网上下载对应版本的SDK,安装完成后同样在终端…

    C# 2023年6月3日
    00
  • C#使用JavaScriptSerializer序列化时的时间类型处理

    说明:本文主要介绍在 C# 中使用 JavaScriptSerializer 序列化时,如何处理时间类型。提供两种示例说明。 问题 在使用 C# 中的 JavaScriptSerializer 序列化对象时,如果包含时间类型,会遇到时间格式序列化异常的问题。而我们通常需要使用特定格式来序列化时间类型,例如 ISO 格式或自定义格式。 解决方法 方法一:通过自…

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