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日

相关文章

  • C#灰度化图像的实例代码

    下面针对“C#灰度化图像的实例代码”的完整攻略进行详细讲解。 标题 概述 在进行灰度化图像处理时,通常需要将图像中的每个像素转换为灰度值,从而实现图像的灰度化。本文将通过 C# 实现灰度化图像的处理。 前提条件 在开始本文的示例代码之前,需要确保您已经具备以下条件: Visual Studio 开发环境 C# 语言基础 实例代码 在进行灰度化图像处理时,可以…

    C# 2023年5月31日
    00
  • C#使用protobuf-net进行序列化的详细操作

    下面是使用protobuf-net进行C#序列化的详细攻略: 什么是protobuf-net protobuf-net是一种.NET平台下的高效且跨语言的序列化框架。与其他序列化框架(如XML序列化)相比,它具有更高的序列化和反序列化效率,能够有效地将对象序列化为二进制形式,以便它们可以被存储或传输。它是Google Protobuf的一个非官方的.NET实…

    C# 2023年5月31日
    00
  • 浅谈AjaxPro.dll,asp.net 前台js调用后台方法

    让我们来详细讲解一下“浅谈AjaxPro.dll,asp.net 前台js调用后台方法”的完整攻略。 什么是AjaxPro.dll AjaxPro.dll 是一个开源的 asp.net AJAX 库,可以帮助我们轻松地实现前台 js 和后台方法的调用,简化了前后台的交互。它特别适用于需要频繁异步交互、需要处理大量数据量的 web 应用程序。 AjaxPro.…

    C# 2023年6月3日
    00
  • C#中decimal保留2位有效小数的实现方法

    以下是 “C#中decimal保留2位有效小数的实现方法”的完整攻略: 1. 格式化输出 C#中decimal类型可以使用ToString方法转化为字符串,将其作为参数传递给Format方法进行格式化输出。使用“0.00”作为格式化字符串可将decimal类型的值转化为保留两位小数的字符串,如下所示: decimal price = 12.3456m; st…

    C# 2023年6月1日
    00
  • C# 中使用正则表达式匹配字符的含义

    当我们在 C# 中处理字符串时,需要使用正则表达式来匹配相应的字符,例如检测一个字符串是否符合某个特定的格式,或者替换掉字符串中的一些特定字符,这些情况都需要使用正则表达式来进行匹配。 1.正则表达式的基本语法 在 C# 中使用正则表达式,需要使用 System.Text.RegularExpressions 名称空间。我们可以使用 Regex.IsMatc…

    C# 2023年6月8日
    00
  • vs2015怎么编写第一个windows程序?

    请参考以下完整攻略: 步骤1:打开Visual Studio 2015 首先,你需要安装Visual Studio 2015,然后打开它。 步骤2:创建一个新项目 在Visual Studio 2015中,单击“文件(File)”菜单,选择“新建(New)”,然后选择“项目(Project)”。 在“新建项目(New Project)”对话框中,选择“Vis…

    C# 2023年6月6日
    00
  • C# yield关键字详解

    C#yield关键字详解 yield 是 C# 中的一个关键字,它可以用来创建迭代器。一个包括 yield 语句的方法或者运算符,被称之为迭代器方法或者迭代器块。 在一个迭代器方法中,通过 yield return 语句向调用者返回一个序列中的下一个元素。每次调用 iterator 方法时,通过 yield return 返回的元素会被记录下来,并暂停方法的…

    C# 2023年5月15日
    00
  • ASP.NET 返回随机数实现代码

    ASP.NET 返回随机数实现代码的完整攻略如下: 1. 生成随机数 可以使用 Random 类来生成伪随机数。在 ASP.NET 中,可以使用以下代码来生成一个介于 0 到 10 之间的随机整数: Random rand = new Random(); int randomNumber = rand.Next(0, 11); 这里,我们首先创建了一个 Ra…

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