C#实现常见加密算法的示例代码

C#实现常见加密算法的示例代码

本篇攻略将会针对C#语言来实现几种常见的加密算法,包括MD5哈希、SHA-1哈希、AES对称加密、RSA非对称加密和Base64编码等。我们将会给出具体的实现代码,并接合实例说明,方便大家在实际开发中使用。

MD5哈希

MD5消息摘要算法常用于数据传输过程中的完整性校验,或者用于保证敏感数据的安全。

示例1:字符串的MD5哈希值

using System;
using System.Security.Cryptography;
using System.Text;

class Program {
    static void Main(string[] args) {
        string input = "hello, world!";
        Console.WriteLine("输入字符串:" + input);

        var md5 = MD5.Create();
        byte[] inputBytes = Encoding.ASCII.GetBytes(input);
        byte[] hashBytes = md5.ComputeHash(inputBytes);

        string output = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
        Console.WriteLine("MD5哈希值:" + output);

        Console.ReadKey();
    }
}

示例2:文件的MD5哈希值

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

class Program {
    static void Main(string[] args) {
        string fileName = "example.txt";
        Console.WriteLine("文件名:" + fileName);

        var md5 = MD5.Create();
        using (var stream = File.OpenRead(fileName)) {
            byte[] hashBytes = md5.ComputeHash(stream);
            string output = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
            Console.WriteLine("MD5哈希值:" + output);
        }

        Console.ReadKey();
    }
}

SHA-1哈希

SHA-1哈希算法也常用于数据传输过程中的完整性校验,但相对于MD5,它的安全性更高。

示例:字符串的SHA-1哈希值

using System;
using System.Security.Cryptography;
using System.Text;

class Program {
    static void Main(string[] args) {
        string input = "hello, world!";
        Console.WriteLine("输入字符串:" + input);

        var sha1 = SHA1.Create();
        byte[] inputBytes = Encoding.ASCII.GetBytes(input);
        byte[] hashBytes = sha1.ComputeHash(inputBytes);

        string output = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
        Console.WriteLine("SHA-1哈希值:" + output);

        Console.ReadKey();
    }
}

AES对称加密

AES对称加密算法常用于数据的加密和解密过程中,相对于DES,它的安全性更高。

示例:字符串的AES对称加密和解密

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

class AesEncryptor {
    private readonly byte[] key;
    private readonly byte[] iv;

    public AesEncryptor(string key, string iv) {
        this.key = Encoding.ASCII.GetBytes(key);
        this.iv = Encoding.ASCII.GetBytes(iv);
    }

    public byte[] Encrypt(byte[] input) {
        using (var aes = Aes.Create()) {
            aes.Key = key;
            aes.IV = iv;

            var encryptor = aes.CreateEncryptor();
            using (var stream = new MemoryStream()) {
                using (var cryptoStream = new CryptoStream(stream, encryptor, CryptoStreamMode.Write)) {
                    cryptoStream.Write(input, 0, input.Length);
                    cryptoStream.FlushFinalBlock();
                    return stream.ToArray();
                }
            }
        }
    }

    public byte[] Decrypt(byte[] input) {
        using (var aes = Aes.Create()) {
            aes.Key = key;
            aes.IV = iv;

            var decryptor = aes.CreateDecryptor();
            using (var stream = new MemoryStream()) {
                using (var cryptoStream = new CryptoStream(stream, decryptor, CryptoStreamMode.Write)) {
                    cryptoStream.Write(input, 0, input.Length);
                    cryptoStream.FlushFinalBlock();
                    return stream.ToArray();
                }
            }
        }
    }
}

class Program {
    static void Main(string[] args) {
        string input = "hello, world!";
        Console.WriteLine("输入字符串:" + input);

        var encryptor = new AesEncryptor("my_secret_key_123", "my_secret_iv_456");
        byte[] inputBytes = Encoding.UTF8.GetBytes(input);
        byte[] encryptedBytes = encryptor.Encrypt(inputBytes);
        Console.WriteLine("加密结果:" + Convert.ToBase64String(encryptedBytes));

        byte[] decryptedBytes = encryptor.Decrypt(encryptedBytes);
        string output = Encoding.UTF8.GetString(decryptedBytes);
        Console.WriteLine("解密结果:" + output);

        Console.ReadKey();
    }
}

RSA非对称加密

RSA非对称加密算法常用于数字签名和数据的加密和解密过程中,它采用公钥进行加密,采用私钥进行解密。

示例:字符串的RSA非对称加密和解密

using System;
using System.Security.Cryptography;
using System.Text;

class RsaEncryptor {
    private readonly RSA rsa;

    public RsaEncryptor(int keyLength) {
        rsa = RSA.Create(keyLength);
    }

    public byte[] Encrypt(byte[] input, RSAParameters publicKey = new RSAParameters()) {
        rsa.ImportParameters(publicKey);
        return rsa.Encrypt(input, RSAEncryptionPadding.Pkcs1);
    }

    public byte[] Decrypt(byte[] input) {
        return rsa.Decrypt(input, RSAEncryptionPadding.Pkcs1);
    }

    public RSAParameters GetPublicKey() {
        return rsa.ExportParameters(false);
    }

    public RSAParameters GetPrivateKey() {
        return rsa.ExportParameters(true);
    }
}

class Program {
    static void Main(string[] args) {
        string input = "hello, world!";
        Console.WriteLine("输入字符串:" + input);

        var encryptor = new RsaEncryptor(2048);
        RSAParameters publicKey = encryptor.GetPublicKey();
        RSAParameters privateKey = encryptor.GetPrivateKey();

        byte[] inputBytes = Encoding.UTF8.GetBytes(input);
        byte[] encryptedBytes = encryptor.Encrypt(inputBytes, publicKey);
        Console.WriteLine("加密结果:" + Convert.ToBase64String(encryptedBytes));

        byte[] decryptedBytes = encryptor.Decrypt(encryptedBytes);
        string output = Encoding.UTF8.GetString(decryptedBytes);
        Console.WriteLine("解密结果:" + output);

        Console.ReadKey();
    }
}

Base64编码

Base64编码算法常用于数据的传输过程中,将二进制数据转换为可打印的ASCII字符串。

示例:字符串的Base64编码和解码

using System;
using System.Text;

class Base64Encoder {
    public string Encode(byte[] input) {
        return Convert.ToBase64String(input);
    }

    public byte[] Decode(string input) {
        return Convert.FromBase64String(input);
    }
}

class Program {
    static void Main(string[] args) {
        string input = "hello, world!";
        Console.WriteLine("输入字符串:" + input);

        var encoder = new Base64Encoder();
        byte[] inputBytes = Encoding.UTF8.GetBytes(input);
        string encodedString = encoder.Encode(inputBytes);
        Console.WriteLine("Base64编码结果:" + encodedString);

        byte[] decodedBytes = encoder.Decode(encodedString);
        string output = Encoding.UTF8.GetString(decodedBytes);
        Console.WriteLine("Base64解码结果:" + output);

        Console.ReadKey();
    }
}

以上就是C#实现常见加密算法的示例代码的完整攻略,希望能够对读者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现常见加密算法的示例代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 详解C# Protobuf如何做到0分配内存的序列化

    C# protobuf是Google开发的一种高效的序列化格式。相较于其他序列化方式(比如XML或Json),它所占用的空间更少,同时速度更快,因为它是二进制序列化格式。在进行序列化过程中,内存的分配是一个非常重要的问题,因为大量的内存分配会导致性能下降甚至内存溢出。本文将详细介绍C# protobuf如何实现0分配内存的序列化。 一、使用“MemorySt…

    C# 2023年5月31日
    00
  • asp.net SqlHelper数据访问层的使用

    作为网站的作者,关于asp.net SqlHelper数据访问层的使用,建议按照以下步骤进行: 步骤一:安装SqlHelper NuGet包 作为Sql Server数据访问层的封装,SqlHelper NuGet包能够帮助我们在asp.net应用程序中快速构建数据访问层。所以在开始本攻略前,最好先确认你已经安装了SqlHelper NuGet包。如果没有安…

    C# 2023年6月3日
    00
  • C#使用NPOI导入Excel的方法详解

    下面详细讲解“C#使用NPOI导入Excel的方法详解”的完整攻略。 安装NPOI 要使用NPOI,需要先安装它。可以通过NuGet包管理器搜索和安装NPOI。 导入Excel的方法 首先,需要先读取Excel文件。可以使用NPOI中的HSSFWorkbook或XSSFWorkbook类来打开Excel文件。 using NPOI.HSSF.UserMode…

    C# 2023年6月7日
    00
  • 关于C#结构体 你需要知道的

    关于C#结构体 你需要知道的 在C#中,结构体是一种轻量级的数据类型,它是一种值类型,而不是引用类型。结构体可以包含字段、方法、属性、构造函数和操作符等成员。 为什么要使用结构体 使用结构体可以提高程序的性能和效率。因为结构体是值类型,而值类型是直接存储在栈上的,这样就避免了装箱和拆箱带来的性能损失。另外,结构体通常不需要被垃圾回收机制处理,所以也减少了内存…

    C# 2023年5月31日
    00
  • C#使用Datatable导出Excel

    Sure,以下是详细讲解”C#使用DataTable导出Excel”的完整攻略。 1. 准备工作 在开始实现功能之前需要先添加引用,右键点击项目,选择“添加”→“引用”,然后在出现的对话框中找到“Microsoft.Office.Interop.Excel”并添加引用。还需要在文件头部添加命名空间: using System.Data; using Micr…

    C# 2023年5月31日
    00
  • C# BackgroundWorker用法详解

    我们来详细讲解一下C#中的BackgroundWorker用法。 一、BackgroundWorker 是什么? 在C#中,BackgroundWorker是一个多线程组件,用于在后台执行一个操作并在主界面上更新相应的进度。它避免了在主线程中直接执行操作而引起的冻结UI界面的问题。 二、BackgroundWorker 的声明 我们使用 Background…

    C# 2023年5月15日
    00
  • C#怎样才能将XML文件导入SQL Server

    将XML文件导入SQL Server的过程需要经过以下步骤: 1. 创建目标表 首先需要在目标数据库中创建一张表,以存储从XML文件中读取到的数据。 CREATE TABLE [TableName] ( [Column1] [DataType], [Column2] [DataType], … [ColumnN] [DataType] ) 2. 读取XM…

    C# 2023年5月31日
    00
  • Oracle数据远程连接的四种设置方法和注意事项

    Oracle数据远程连接的四种设置方法和注意事项 Oracle数据库是一款功能强大的数据库产品,可进行本地和远程连接。通过远程连接,可以让多个客户端连接到同一个数据库实例,实现共享数据的目的。在本文中,我们将详细讲解Oracle数据远程连接的四种设置方法和注意事项。 1. 设置监听器(Listener) 监听器是Oracle数据库与其他应用程序之间通信的重要…

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