C#常用字符串加密解密方法封装代码

非常感谢您对C#常用字符串加密解密方法封装代码的关注。下面为您详细介绍如何实现该功能。

1. 基本概念

在介绍具体的代码实现之前,首先需要了解一些基本概念。

1.1 加密和解密

加密是指将原始的明文数据通过一定的算法转换为密文,以达到防止信息泄露的目的;而解密则是指将密文数据还原回原始的明文数据。

1.2 对称加密和非对称加密

对称加密是指加密和解密使用同一把密钥的加密方式,常用的对称加密算法有DES、3DES和AES等;而非对称加密则是指加密和解密使用不同的密钥,常用的非对称加密算法有RSA和ECC等。

1.3 哈希算法

哈希算法是将任意长度的消息压缩到固定长度的摘要的一种算法,通常称为哈希值。哈希算法是单向的,即不能通过哈希值还原出原始的消息。常用的哈希算法有SHA1、SHA256和MD5等。

2. 实现代码

在了解了基本概念之后,我们可以开始介绍如何实现C#常用字符串加密解密方法封装代码。

2.1 MD5加密

MD5加密是一种哈希算法加密方式,具有不可逆性。可以使用以下代码实现该功能:

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

public static string EncryptMD5(string input)
{
    if (string.IsNullOrEmpty(input))
    {
        return string.Empty;
    }

    using (var md5 = MD5.Create())
    {
        var buffer = Encoding.UTF8.GetBytes(input);
        var result = md5.ComputeHash(buffer);
        var builder = new StringBuilder();
        for (var i = 0; i < result.Length; i++)
        {
            builder.Append(result[i].ToString("x2"));
        }
        return builder.ToString();
    }
}

该代码中,我们使用了.NET Framework自带的MD5类。首先将字符串转换为字节数组,然后计算MD5值,最后将MD5值转换为16进制字符串(这里使用的是小写字母)并返回。

例如,我们可以使用以下代码对字符串"123456"进行加密:

var input = "123456";
var md5 = EncryptMD5(input);
Console.WriteLine(md5); // 输出结果:e10adc3949ba59abbe56e057f20f883e

2.2 AES加密和解密

AES加密和解密是一种对称加密算法,需要使用同一把密钥进行加密和解密。可以使用以下代码实现该功能:

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

public static string EncryptAES(string input, string key)
{
    if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(key))
    {
        return string.Empty;
    }

    var buffer = Encoding.UTF8.GetBytes(input);
    var iv = Encoding.UTF8.GetBytes(key.Substring(0, 16));
    using (var aes = Aes.Create())
    {
        aes.Key = Encoding.UTF8.GetBytes(key);
        aes.IV = iv;
        using (var encryptor = aes.CreateEncryptor())
        {
            using (var memoryStream = new MemoryStream())
            {
                using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                {
                    cryptoStream.Write(buffer, 0, buffer.Length);
                    cryptoStream.FlushFinalBlock();
                    return Convert.ToBase64String(memoryStream.ToArray());
                }
            }
        }
    }
}

public static string DecryptAES(string input, string key)
{
    if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(key))
    {
        return string.Empty;
    }

    var buffer = Convert.FromBase64String(input);
    var iv = Encoding.UTF8.GetBytes(key.Substring(0, 16));
    using (var aes = Aes.Create())
    {
        aes.Key = Encoding.UTF8.GetBytes(key);
        aes.IV = iv;
        using (var decryptor = aes.CreateDecryptor())
        {
            using (var memoryStream = new MemoryStream())
            {
                using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Write))
                {
                    cryptoStream.Write(buffer, 0, buffer.Length);
                    cryptoStream.FlushFinalBlock();
                    return Encoding.UTF8.GetString(memoryStream.ToArray());
                }
            }
        }
    }
}

该代码中,我们使用了.NET Framework自带的Aes类。首先将字符串和密钥转换为字节数组,然后使用Aes类来创建加密和解密器,最后将加密或解密后的字节数组转换为字符串并返回。

例如,我们可以使用以下代码对字符串"Hello, world!"进行加密和解密:

var input = "Hello, world!";
var key = "1234567890123456";
var encrypted = EncryptAES(input, key);
Console.WriteLine(encrypted); // 输出结果:HJMiBdldmqnsOGtXJeW0DQ==
var decrypted = DecryptAES(encrypted, key);
Console.WriteLine(decrypted); // 输出结果:Hello, world!

3. 总结

经过以上的介绍,相信您已经了解了C#常用字符串加密解密方法封装代码的基本实现方式。不同的加密方式有不同的实现方式,需要根据实际情况进行选择。希望本文能够为您提供帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#常用字符串加密解密方法封装代码 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • .net设计模式之装饰模式(Decorator)

    当我们需要在不改变原有类的情况下对其进行新功能添加或修改时,装饰模式是一种适用的设计模式。它允许向一个现有对象添加新的功能,同时又不改变其结构。该模式是一种结构性模式。 装饰模式(Decorator)的基本结构 装饰模式有四个角色: 抽象构建(Component):定义一个对象接口,可以给这些对象动态地添加职责。 具体构建(ConcreteComponent…

    C# 2023年6月3日
    00
  • C#泛型详解

    C#泛型详解 什么是泛型? 泛型是一种将类型参数化的方式。在定义类、结构体、接口和方法时,可以使用类型参数来定义它们的类型而不是具体的类型。这种机制使代码可以更加灵活、可重用并且类型安全。 泛型的优势 泛型可以增加代码的灵活性和重用性,因为它可以让我们定义一个单独的类、结构或方法,而不必为每种类型都定义一个新的类、结构或方法。 泛型还提高了代码的类型安全性。…

    C# 2023年5月14日
    00
  • C#中委托的进一步理解

    在C#中,委托是一种特殊的类型,它是一种可以存储对其他方法的引用(或类似指针的实体),并且可以调用这些方法的对象。委托可以像一般函数一样调用,并且在函数调用时会自动通知它所负责的所有方法去执行。 在C#中,委托可以用来实现回调机制,将一个委托对象作为参数传递给另一个函数,这样,当另一个函数完成任务后,就可以调用这个委托来通知回调函数。 委托属于引用类型,它可…

    C# 2023年6月6日
    00
  • c# Thread类线程常用操作详解

    c#Thread类线程常用操作详解 什么是Thread类 Thread 类提供了访问和操作线程的一系列方法和属性。开发人员可以新建和控制线程、设置线程的优先级、执行线程的暂停、继续、等待操作等。Thread 类定义在 System.Threading 命名空间中。 如何创建一个线程 使用 Thread 类来创建一个新线程: Thread thread1 = …

    C# 2023年5月15日
    00
  • C# 获得本地通用网卡信息的示例代码

    获取本地通用网卡信息是一个非常常见的需求,C#提供了System.Net.NetworkInformation命名空间下的NetworkInterface类来实现该功能。下面我们来详细讲解如何获得本地通用网卡信息的示例代码: 1.获取本地所有网卡信息 使用NetworkInterface类可以获取本地所有网卡信息,示例代码如下: using System.N…

    C# 2023年5月31日
    00
  • 记录.Net部署Docker-v指令使用

    记录Docker的-v指令使用 前言 之前我浅学了一下docker,方便部署.net项目(部署的是打包之后的项目) dockerfile文件如下: FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 5031 EXPOSE 7031 FROM mcr.microsoft.c…

    C# 2023年4月25日
    00
  • C#将字节数组转换成数字的方法

    将字节数组转换成数字是在编程中经常遇到的需求。本文将详细讲解如何使用C#将字节数组转换成数字的方法。 使用BitConverter类进行转换 C#中内置的BitConverter类可以将字节数组转换成数字,使用方法如下: byte[] bytes = new byte[] { 0x01, 0x02, 0x03, 0x04 }; int result = Bi…

    C# 2023年6月8日
    00
  • C#实现在窗体上的统计图效果

    首先,在窗体上实现统计图效果的方式有很多种,以下是其中一种具体的实现方法,具体攻略如下: 1. 准备工作 在使用C#实现窗体上统计图效果之前,我们需要确保以下几点: 确保在Visual Studio中安装了Windows Forms应用程序工具包 确保在Windows Form中添加了一个Chart控件 2. 设定数据源 在Chart控件中使用数据源,可以是…

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