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

yizhihongxing

非常感谢您对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日

相关文章

  • 编写的vs2005水晶报表程序在vs2008下正常使用的一些实现方法

    由于 VS2005 和 VS2008 版本之间存在一些差异,导致在 VS2008 中运行之前在 VS2005 中编写的水晶报表程序会出现一些问题,本文将讲解如何使用一些实现方法修复这些问题。 1. 更新水晶报表的版本 VS2008 支持的水晶报表的版本是 10.5,而 VS2005 支持的最高版本仅为 10.0。因此,首先需要将水晶报表的版本升级为 VS20…

    C# 2023年5月15日
    00
  • C#中Quartz的使用

    安装 NuGet 包:在 Visual Studio 中打开项目,右键单击项目名称,选择“管理 NuGet 包”,搜索“Quartz”并安装。 创建作业:创建一个实现了 IJob 接口的类,该接口包含一个 Execute 方法,该方法将在作业运行时调用。例如: public class MyJob : IJob { public Task Execute(I…

    C# 2023年4月22日
    00
  • C# Linq的ToLookup()方法 – 将序列转换为查找表

    C#中的Linq是一个强大的数据查询和操作工具,其中ToLookup()方法是Linq中的一个用于将集合转换为Lookup类型的方法,本文将为您提供ToLookup()方法的完整攻略。 ToLookup()方法概述 ToLookup()方法是对IEnumerable集合类型进行查询与操作的Linq方法之一,它的作用是将集合转换为Lookup类型,其中TKey…

    C# 2023年4月19日
    00
  • 让Visual Studio用上chatgpt

        最近小编思维发散“Visual Studio可以集成chatgpt吗?”,这样不就可以让chatgpt帮你写代码了吗?寻觅了一圈,还真有这个东西,那就是一个Visual Studio的扩展插件:Visual chatGPT Studio,虽然不是官方的,部分功能也可以值得一用。本文将介绍Visual chatGPT Studio及它的使用案例。 一、…

    C# 2023年5月4日
    00
  • C#中使用反射遍历一个对象属性及值的小技巧

    下面我将详细讲解如何使用反射遍历一个对象属性及值的小技巧。 步骤一:导入命名空间 使用反射需要导入System.Reflection命名空间,可以通过以下方式导入: using System.Reflection; 步骤二:获取对象的类型 首先,需要获取待遍历对象的类型,可以通过以下代码获取: var type = obj.GetType(); 其中,obj…

    C# 2023年6月1日
    00
  • C#实现单例模式的6种方法小结

    C#实现单例模式的6种方法小结 什么是单例模式? 单例模式是一种软件设计模式,它限制了某个类只能有一个实例,并且该实例可以从全局访问。单例模式通常用于控制资源的共享,并且可以避免竞态条件(race condition)。 单例模式的优点 单例模式可以保证某个类在全局范围内只有一个对象实例,这可以减少系统中的内存占用和资源消耗 单例模式可以确保某些操作只会被执…

    C# 2023年5月15日
    00
  • C#实现压缩和解压缩的方法示例【Gzip和Zip方式】

    “C#实现压缩和解压缩的方法示例【Gzip和Zip方式】”主要涉及到C#语言如何处理压缩和解压缩。下面我将详细讲解该攻略及其示例注释。 一、背景 在日常编程中,我们经常会遇到需要处理文件压缩和解压缩的需求。C#作为.NET平台的主要语言之一,提供了比较完整的压缩和解压缩支持。本攻略主要介绍C#中如何使用Gzip和Zip方式进行文件压缩和解压缩。 二、Gzip…

    C# 2023年6月7日
    00
  • C#中获取、生成随机数的三种方法

    获取或生成随机数在编程中是一个比较常见的需求。在 C# 中,我们可以使用以下三种方法来获取或生成随机数: 1. 使用 Random 类 Random 类是 C# 中用来生成随机数的一个内置类。当我们使用该类生成随机数时,需要先实例化一个 Random 对象,然后调用该对象的 Next 方法来生成一个随机整数。Next 方法有以下两种重载形式: int Nex…

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