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# winform跨线程操作控件的实现

    本文主要讲解 C# WinForm 中如何跨线程操作控件的实现方法,下面是完整的攻略过程。 什么是跨线程操作控件 在 C# WinForm 中,所有控件都必须在创建它的线程中操作。如果在其他线程中访问控件,将会抛出一个”跨线程操作无效“的异常。因此,当我们在工作中需要在多个线程中操作同一个控件时,就需要用到跨线程操作控件的方法。 实现方法 C# WinFor…

    C# 2023年6月6日
    00
  • ASP.NET Core中Razor页面的Handlers处理方法详解

    ASP.NET Core中Razor页面的Handlers处理方法详解 在ASP.NET Core中,Razor页面是一种用于创建Web应用程序的强大工具。Razor页面可以使用C#代码和HTML标记来创建动态Web页面。Handlers是一种用于处理Razor页面中的表单提交和其他用户交互的方法。本攻略将提供一些示例,演示如何在ASP.NET Core中使…

    C# 2023年5月17日
    00
  • C# 中闭包(Closure)详解

    C# 中闭包(Closure)详解 什么是闭包 在C#中,闭包(Closure)指的是可以访问一个函数内部的局部变量,并将其封装在返回的委托(Delegate)中的函数。换句话说,闭包就是一个函数及其引用链。通过闭包,我们可以将局部变量在函数作用域外部继续使用。C#中的闭包在Lambda函数中也可以使用。 如何使用闭包 使用闭包可以方便地在委托中传递参数。举…

    C# 2023年6月7日
    00
  • C# log4net日志库的用法小结

    下面就详细讲解一下“C# log4net日志库的用法小结”的完整攻略。 1. 什么是log4net log4net是一个开源的日志库,它可以帮助我们记录应用程序的运行日志,比如错误信息、调试信息、警告信息等。log4net可以支持多种输出方式,比如文件、控制台、数据库等,开发者可以根据自己的需求进行配置。 2. log4net的使用步骤 使用log4net的…

    C# 2023年6月1日
    00
  • C#中委托、事件和回调的使用及说明

    C#中委托、事件和回调的使用及说明 什么是委托? 委托(Delegate)是C#中的一个类型,它可以指向一个或多个方法,通过委托可以实现方法的回调和事件的发布/订阅,使得代码更加灵活和扩展性更强。 委托的声明和使用 delegate int MyDelegate(int x, int y); // 声明一个委托类型 public class Calculat…

    C# 2023年5月31日
    00
  • VS2019中.NET如何实现打日志功能

    下面我将为您详细讲解如何在VS2019中使用.NET实现打印日志功能。 1. 添加NuGet包 首先,我们需要添加NuGet包,来使用.NET提供的日志库。打开VS2019的NuGet包管理器,搜索属性“Microsoft.Extensions.Logging”,并安装该NuGet包。 2. 创建Logger实例 在代码中创建ILogger实例,使用Logg…

    C# 2023年5月31日
    00
  • C#实现窗口之间的传值

    C#实现窗口之间的传值是一个重要的技能,特别是在Windows桌面应用程序中常常使用。在本文中,我们将讲解如何实现窗口之间的传值,包括基本概念、技术架构和代码示例等。 一、基本概念 实现窗口之间的传值,我们需要先了解以下几个概念。 窗口之间的传值一般是指在Windows桌面应用程序中,从一个窗口传递数据到另一个窗口或控件的过程。 传值可以是简单的值类型,如i…

    C# 2023年6月1日
    00
  • .net core 中 WebApiClientCore的使用示例代码

    以下是关于“.NET Core中WebApiClientCore的使用示例代码”的完整攻略: 1. 什么是WebApiClientCore? WebApiClientCore是一个.NET的HTTP客户端库,它提供了一种简单的方式来调用Web API。WebApiClientCore支同步和异步调用,并提了一些有用的功能,例如自动序列化和反序列化JSON数据…

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