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日

相关文章

  • C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法

    首先,我们需要了解Windows API及C#中如何调用Windows API。Windows API是Windows操作系统提供给开发者的一组函数,通过这些函数我们可以访问Windows系统的各种资源。在C#中,我们可以使用[DllImport]特性来调用Windows API中的函数。 在本篇攻略中,我们将介绍如何使用GetDesktopWindow函数…

    C# 2023年6月7日
    00
  • ASP.NET Core使用MiniProfiler分析应用

    在 ASP.NET Core 中,可以使用 MiniProfiler 库来分析应用程序的性能。MiniProfiler 是一个轻量级的库,可以帮助开发人员快速识别和解决性能问题。以下是 ASP.NET Core 使用 MiniProfiler 分析应用的完整攻略: 步骤一:安装 MiniProfiler 在使用 MiniProfiler 之前,需要安装 Mi…

    C# 2023年5月17日
    00
  • 深入理解C#之继承

    深入理解C#之继承 继承是面向对象编程中非常重要的一种机制,它可以使得我们代码重用性更高,更加简洁。在C#中,继承可以通过类之间的关系来实现(类之间的关系有继承、实现、组合等)。在本篇文章中,我们将学习C#中的继承机制,重点包括如下内容: 继承的语法和基本概念 虚方法和抽象类 接口继承 隐藏和重写方法 继承链 继承的语法和基本概念 在C#中,使用:符号表示一…

    C# 2023年5月15日
    00
  • C#中ZipHelper 压缩和解压帮助类

    下面我将为您详细讲解“C#中ZipHelper压缩和解压帮助类”的完整攻略。 1. 概述 ZipHelper是一个C#开发的压缩和解压缩帮助类,使用简单方便,目前已经被广泛应用。下面介绍ZipHelper的基本使用方法及示例。 2. 安装 要使用ZipHelper,需要下载NuGet包“ICSharpCode.SharpZipLib”。可以通过NuGet P…

    C# 2023年5月15日
    00
  • DataReader不能使用using的详细示例

    当使用DataReader读取数据时,通常需要确保DataReader对象在使用完毕后可以被及时的释放。然而,如果在使用DataReader时使用了using语句块,则会抛出“Invalid attempt to call Read when reader is closed”异常,这是因为在销毁using语句块内的对象时,DataReader对象也会被关闭…

    C# 2023年5月15日
    00
  • IIS7 fastcgi方式安装php

    IIS7 fastcgi方式安装php IIS7是一种Web服务器,可以用于托管ASP.NET和PHP应用程序。在IIS7中,可以使用fastcgi方式来安装PHP。本文将提供详细的“IIS7 fastcgi方式安装php”的完整攻略,包括如何安装fastcgi和PHP,以及示例代码。 安装fastcgi 安装fastcgi需要以下步骤: 下载fastcgi…

    C# 2023年5月15日
    00
  • 使用HttpClient消费ASP.NET Web API服务案例

    以下是“使用HttpClient消费ASP.NET Web API服务案例”的完整攻略: 什么是HttpClient HttpClient是.NET Framework中的一个类,它提供了一组用于发送请求和接收HTTP应的方法。我们可以使用它来消费Web API服务。 消费Web API服务 以下是使用HttpClient消费ASP.NET Web API的…

    C# 2023年5月12日
    00
  • 解析C#的扩展方法

    以下是解析C#的扩展方法的完整攻略: 什么是C#的扩展方法? C#的扩展方法是一种特殊的静态方法,可以向已存在的类添加新的方法。使用扩展方法可以使已经封装好的类变得更加灵活,方便开发者自定义其功能。 如何定义扩展方法? 定义扩展方法需要以下几个要素: 扩展方法必须被定义在静态类中。 扩展方法必须使用this关键字作为方法的第一个参数,表示需要扩展的类型。 扩…

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