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日

相关文章

  • 详解Unity 实现语音识别功能

    详解Unity实现语音识别功能 1. 简介 本文将介绍如何使用Google Cloud Platform中的语音识别API实现Unity中的语音识别功能。语音识别是一项较为先进的技术,能够帮助我们更快捷地输入文字和指令,提高用户体验。Unity目前已经支持语音识别的插件,其中Google Cloud语音识别API是一种流行的实现方式。 2. 准备工作 在开始…

    C# 2023年5月15日
    00
  • C#操作INI文件的方法详解

    C#操作INI文件的方法详解 什么是INI文件? INI文件(.INI文件)是Windows操作系统中常见的配置文件格式,它的简单文本格式使得多个应用程序和操作系统可以读取并修改它,通常用于保存程序或应用程序的配置信息。INI文件中的数据通常被组织为段落和参数的形式,在应用程序或操作系统中也可以通过读写INI文件来保存和读取配置信息。 C#中操作INI文件的…

    C# 2023年6月1日
    00
  • C#基于百度AI实现机器翻译功能

    下面是“C#基于百度AI实现机器翻译功能”完整攻略的详细讲解。 1. 准备工作 在开始实现机器翻译功能之前,我们需要先准备好所需要的资源和工具: 1.1 安装百度AI SDK 访问百度AI开放平台并注册账号,然后可以在控制台获取到 api_key 和 secret_key。 百度AI SDK提供了各种AI相关的服务,我们需要安装其中的机器翻译SDK,可以通过…

    C# 2023年5月31日
    00
  • C#中async/await之线程上下文工作原理

    首先让我们来了解一下async/await在C#中的基本概念和原理。 什么是async/await? async/await是C#中异步编程的关键字,是一种改进了的异步编程模型。它基于任务(Task)和协程(Coroutine),通过简明的语法糖,使得异步编程变得更加易于理解和使用。 它的核心思想是将异步操作打包成一个任务(Task),在需要时使用await…

    C# 2023年6月6日
    00
  • C#实现系统休眠或静止休眠的方法

    下面是C#实现系统休眠或静止休眠的方法的完整攻略。 1. 系统休眠 1.1 方法介绍 我们可以通过Windows API去实现系统休眠,具体的API是SetSuspendState。该方法有两个参数,参数一表示是否进入睡眠(0表示待机,1表示睡眠),参数二表示是否启用快速恢复。 1.2 代码示例 下面是一个简单的实现系统休眠的代码示例: using Syst…

    C# 2023年6月7日
    00
  • C#数值转换-显式数值转换表(参考)

    C#数值转换 – 显式数值转换表(参考) 在C#中,可以使用显式数值转换实现不同类型之间的转换。在进行显式数值转换时,需要使用类型转换运算符,也可以使用Convert或Parse方法。 本文提供了一个显式数值转换表,包含了常见的数值类型,以及它们之间的转换示例。 显式数值转换表 From DataType To DataType Type Conversio…

    C# 2023年5月15日
    00
  • C#实现TCP和UDP通信的示例详解

    对于C#实现TCP和UDP通信的示例详解,我提供以下攻略: 简介 TCP和UDP是常见的网络传输协议,TCP是传输控制协议,UDP是用户数据报协议。在C#中,可以利用Socket类来进行TCP和UDP通信的实现。 TCP通信示例 连接 在C#中,要进行TCP通信,首先需要创建一个Socket对象。以下是创建Socket的示例代码: Socket client…

    C# 2023年6月6日
    00
  • c#中var关键字用法浅谈

    C#中var关键字用法浅谈 在C#中,var关键字可以用于自动类型推断。它被用来声明一个变量,让编译器根据右侧的值来推断变量的类型,可以在某些情况下帮助简化代码,提高可读性。 var的使用 使用var的语法格式如下: var variableName = initialValue; 在这里,我们声明一个变量variableName,并给它赋予一个初始值ini…

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