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日

相关文章

  • .NET的Ajax请求数据提交实例

    下面我将详细讲解“.NET的Ajax请求数据提交实例”的完整攻略。 1. AJAX请求说明 在前端开发中,经常会遇到需要异步发送和接收数据的场景。现在前端技术十分发达,jQuery、Vue.js、React等主流框架都支持AJAX的执行。 AJAX全称为Asynchronous JavaScript and XML,即异步的JavaScript和XML。使用…

    C# 2023年5月31日
    00
  • 浅谈C# AOP的简单实现

    我会详细讲解“浅谈C# AOP的简单实现”的完整攻略,包含以下几个方面: 什么是AOP? C#中AOP的实现方式 AOP的简单实现过程 示例1:使用AOP实现计算方法的执行时间 示例2:使用AOP实现方法调用前后打印日志 1. 什么是AOP? AOP(Aspect-Oriented Programming)即面向切面编程,它是一种软件开发的方法论,能够将系统…

    C# 2023年5月15日
    00
  • C#中怎么将一个List转换为只读的

    将一个List转换为只读的可以使用ReadOnlyCollection<T>来实现。ReadOnlyCollection<T>是IList<T>接口的一个只读实现,它只提供了读取元素的方法,不提供添加、修改或删除元素的方法,从而确保了List不可变。 下面是将一个List转换为只读的示例代码: List<int&gt…

    C# 2023年6月6日
    00
  • .NET Core项目使用swagger开发组件

    .NET Core项目使用Swagger开发组件 Swagger是一种用于描述RESTful Web服务的标准格式,它可以帮助我们生成API文档和客户端代码。在.NET Core项目中,我们可以使用Swagger来开发组件。本攻略将详细介绍如何在.NET Core项目中使用Swagger开发组件。 环境要求 在进行.NET Core项目使用Swagger开发…

    C# 2023年5月17日
    00
  • linux操作系统安装MONO执行C#程序的详解步骤

    下面是安装MONO并执行C#程序的详细步骤: 简述 首先,需要理解什么是MONO。MONO是一个可跨平台的开源的.NET框架实现,它能够让开发者使用C#等.NET语言在Linux、MacOS、Windows等多个操作系统上运行程序。因此,如果你想在Linux上执行C#程序,就需要先安装MONO。 步骤 检查系统是否已经安装了MONO: 在终端中输入以下命令:…

    C# 2023年6月3日
    00
  • C# WPF数据绑定方法以及重写数据模板后数据绑定

    写在前面 本文将会介绍WPF如何实现前后端数据绑定和在进行数据绑定时常用的方法和类以及对于DataGrid、ListView这样的控件重写数据模板后控件如何进行数据绑定。 本文主要针对于数据绑定的基础实现进行介绍,通过此博文你将会有能力编写一个MVVM设计模式的C#、WPF项目。如果您是C#及WPF的资深开发人员本文可能对您没有太大的帮助,但如果你是一个正在…

    C# 2023年4月17日
    00
  • 正则表达式(语法篇推荐)

    下面我来详细讲解正则表达式的语法和应用。 什么是正则表达式? 正则表达式(Regular Expression)又称作“规则表达式”,简称正则(RegExp),是一种用来描述文本模式的工具。使用正则表达式可以对字符串进行高级的模式匹配和文本处理。正则表达式是一种通用的语言,它不仅可以在程序设计中被使用,而且可用于各种文本编辑器、命令行工具等应用中。 正则表达…

    C# 2023年6月7日
    00
  • C# MVC模式下商品抽奖功能实现

    下面是“C# MVC模式下商品抽奖功能实现”的完整攻略: 1. 确定需求并进行规划 在进行开发之前,先要确定功能需求并进行详细的规划设计工作。在这个案例中,我们需要实现商品抽奖功能,具体的规划流程如下: 确定数据库表结构:商品表、用户表、中奖记录表; 实现商品列表页面,展示商品的图片和基本信息; 实现用户登录和注册功能,用户登录后才能参与抽奖; 实现抽奖页面…

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