C#编写DES加密、解密类

C#编写DES加密、解密类

DES是一种对称加密算法,其全称为Data Encryption Standard。在现代通讯、网络、存储、金融等各个领域都起到了不可替代的数据加密保护作用。在C#中,可以通过编写DES加密、解密类来实现数据加密与解密操作。

1.创建DES加密、解密类

首先,我们需要创建一个类来封装DES加密、解密操作。可以参照下面的代码:

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

public class DESHelper
{
    private static string key = "12345678";  // 8位秘钥
    private static byte[] sKey = Encoding.UTF8.GetBytes(key);  // 秘钥字节数组
    private static byte[] sIV = Encoding.UTF8.GetBytes(key);  // 向量字节数组

    // 加密字符串,返回经过加密后的字符串
    public static string Encrypt(string input)
    {
        byte[] data = Encoding.UTF8.GetBytes(input);  // 待加密的字符串转换为字节数组
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();  // 创建DES加密对象
        des.Key = sKey;  // 设置秘钥
        des.IV = sIV;  // 设置向量

        using (var ms = new System.IO.MemoryStream())
        {
            using (var cryptoStream = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cryptoStream.Write(data, 0, data.Length);
                cryptoStream.FlushFinalBlock();
                return Convert.ToBase64String(ms.ToArray());  // 转换为Base64字符串
            }
        }
    }

    // 解密字符串,返回经过解密后的原始字符串
    public static string Decrypt(string input)
    {
        byte[] data = Convert.FromBase64String(input);
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        des.Key = sKey;
        des.IV = sIV;

        using (var ms = new System.IO.MemoryStream())
        {
            using (var cryptoStream = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
            {
                cryptoStream.Write(data, 0, data.Length);
                cryptoStream.FlushFinalBlock();
                return Encoding.UTF8.GetString(ms.ToArray());  // 字节数组转换为字符串
            }
        }
    }
}

这里我们采用静态类的方式来封装加密、解密操作。其中,私有静态变量key表示秘钥,sKey和sIV分别表示秘钥和向量的字节数组。在这里,我们将秘钥和向量都设置为相同的值。

在Encrypt方法中,首先将原始字符串转换为字节数组,然后创建DES加密对象,设置秘钥和向量,使用CryptoStream将数据加密后转换为Base64字符串。在Decrypt方法中,首先将Base64字符串转换为字节数组,然后创建DES加密对象,设置秘钥和向量,使用CryptoStream将数据解密后转换为原始字符串。

2.使用DES加密、解密类

使用上面封装好的DES加密、解密类十分简单。我们可以直接调用Encrypt和Decrypt方法来实现加密、解密操作。下面给出两个示例:

示例1:加密字符串并输出结果

string inputStr = "Hello, DES!";
string encryptedStr = DESHelper.Encrypt(inputStr);  // 调用DESHelper类的Encrypt方法加密字符串
Console.WriteLine("加密前:" + inputStr);
Console.WriteLine("加密后:" + encryptedStr);

运行结果如下:

加密前:Hello, DES!
加密后:NM/X+iEXd12bL9sz+0sEhQ==

示例2:解密字符串并输出结果

string inputStr = "NM/X+iEXd12bL9sz+0sEhQ==";
string decryptedStr = DESHelper.Decrypt(inputStr);  // 调用DESHelper类的Decrypt方法解密字符串
Console.WriteLine("解密前:" + inputStr);
Console.WriteLine("解密后:" + decryptedStr);

运行结果如下:

解密前:NM/X+iEXd12bL9sz+0sEhQ==
解密后:Hello, DES!

这样,我们就成功地实现了DES加密、解密类,并且使用它进行了字符串加密、解密操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#编写DES加密、解密类 - Python技术站

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

相关文章

  • C# 计算DataTime的4种时间差的方法(相差天数、相差小时、相差分钟、相差秒)

    下面我来详细讲解“C# 计算DataTime的4种时间差的方法(相差天数、相差小时、相差分钟、相差秒)”的完整攻略。 1. 计算相差天数 可以使用DateTime的Subtract方法计算出两个时间之间相差的TimeSpan,然后获取TimeSpan中的Days属性即可。 DateTime startTime = DateTime.Now; DateTime…

    C# 2023年5月31日
    00
  • C#从前面或后面按指定数量删除字符串

    让我为您详细讲解 “C#从前面或后面按指定数量删除字符串” 的完整攻略吧。 方法一:Substring()方法 C#的字符串类型中有一个名为Substring()的方法,可以截取子字符串,从而实现删除指定数量的字符。 从前面删除字符串 从前面删除字符串,需要保留剩余字符串的后面部分,可以使用Substring()方法的起始位置参数startIndex和需要保…

    C# 2023年6月8日
    00
  • C#实现绘制随机噪点和直线

    请看下面: C#实现绘制随机噪点和直线 第一步:创建窗体和画布 首先,在Visual Studio的菜单栏中选择:File -> New -> Project,在弹出的窗口中选择:Windows Forms App(.NET Framework),取一个有意义的名称,然后点击创建按钮。 接下来,在弹出的窗口中选择:Form,创建一个窗体。然后在窗…

    C# 2023年6月6日
    00
  • .NET的深复制方法(以C#语言为例)

    以下是关于.NET的深复制(Deep copy)的说明和实例: 深复制的概念 在.NET中,对象类型包括值类型和引用类型。值类型在进行复制时,会重新创建一个新的副本;而引用类型在进行复制时,复制的只是引用地址,指向同一个原始对象。这样可能会引起一些问题,例如,当我们修改复制后的对象时,会影响原始对象。为了避免这种问题,我们需要进行深复制,即复制整个对象及其引…

    C# 2023年5月15日
    00
  • c#的dllimport使用方法详解

    关于“C#的DllImport使用方法详解”的攻略如下: 简介 DllImport是C#中一个用于调用非托管代码的方法。它可以让我们在C#代码中调用一些使用一些C++或Win32 API等编写的代码。 使用方法 DllImport的用法非常简单,我们只需要使用指定DllImport特性来声明一个需要调用的函数,然后在代码中直接调用该函数即可。 下面是DllI…

    C# 2023年6月1日
    00
  • 让IIS8支持WCF的更简单方法

    让IIS8支持WCF的更简单方法 WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的技术。在IIS8上部署WCF服务时,需要进行一些配置。本文将详细讲解如何让IIS8支持WCF的更简单方法,并提供两个示例。 1. 安装.NET Framework 4.5 在IIS8上部署WCF服务之前,需要先安装.NET…

    C# 2023年5月15日
    00
  • C# File.ReadAllText(string path):读取指定文件的所有文本内容

    C#的File.ReadAllText(string path)方法用于读取指定文件的所有文本内容,并以字符串形式返回。该方法适用于读取文本文件中的数据,如果尝试读取非文本文件(如二进制图像),则会导致方法执行失败。 方法参数 File.ReadAllText() 方法需要传入表示文件路径的字符串类型参数,指定要读取的文件。 返回值 File.ReadAll…

    C# 2023年4月19日
    00
  • Directory文件类的实例讲解

    当我们在进行网站或者应用程序的开发时,通常需要对文件进行管理。其中一个重要的文件类是Directory文件类。在这个话题中,我们将详细讲解Directory文件类的实例。 Directory文件类的作用 Directory是一个文件类,用于对文件夹进行操作。通过Directory文件类,我们可以创建、复制、移动、删除、枚举文件夹中的文件或子文件夹等操作。 D…

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