在 C# 中加密和解密一个字符串

Muhammad Maisam Abbas 2023年1月30日 2021年4月29日
  1. 使用 C# 中的 AesManaged 类加密字符串
  2. 使用 C# 中的 AesManaged 类解密字符串
在 C# 中加密和解密一个字符串

本教程将讨论使用 C# 加密和解密字符串的方法。

使用 C# 中的 AesManaged 类加密字符串

加密是将数据转换为密文的过程,因此任何未经授权的个人都无法访问数据。在本教程中,我们将使用高级加密标准(AES)算法对 C# 中的字符串进行加密和解密。AesManaged提供了使用 AES 算法对字符串进行加密和解密的方法。CreateEncryptor() 函数可以使用密钥加密数据。我们必须将字符串键传递给 CreateEncryptor() 函数。以下代码示例向我们展示了如何使用 C# 中的 CreateEncryptor() 函数根据 AES 算法对字符串进行加密。

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

namespace encrypt_decrypt_string
{
    class Program
    {
        static string Encrypt()
        {
            try
            {
                string textToEncrypt = "WaterWorld";
                string ToReturn = "";
                string publickey = "12345678";
                string secretkey = "87654321";
                byte[] secretkeyByte = { };
                secretkeyByte = System.Text.Encoding.UTF8.GetBytes(secretkey);
                byte[] publickeybyte = { };
                publickeybyte = System.Text.Encoding.UTF8.GetBytes(publickey);
                MemoryStream ms = null;
                CryptoStream cs = null;
                byte[] inputbyteArray = System.Text.Encoding.UTF8.GetBytes(textToEncrypt);
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    ms = new MemoryStream();
                    cs = new CryptoStream(ms, des.CreateEncryptor(publickeybyte, secretkeyByte), CryptoStreamMode.Write);
                    cs.Write(inputbyteArray, 0, inputbyteArray.Length);
                    cs.FlushFinalBlock();
                    ToReturn = Convert.ToBase64String(ms.ToArray());
                }
                return ToReturn;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex.InnerException);
            }
        }
        static void Main(string[] args)
        {
            string encrypted = Encrypt();
            Console.WriteLine(encrypted);
        }
    }
}

输出:

6+PXxVWlBqcUnIdqsMyUHA==

在上面的代码中,我们以 publickeysecretkey 作为密钥对字符串 WaterWorld 进行了加密,并以加密字符串的形式返回了 6+PXxVWlBqcUnIdqsMyUHA==。两个密钥的长度必须至少为 8 个字符。

使用 C# 中的 AesManaged 类解密字符串

解密是将密文转换回原始数据,以便授权个人可以访问数据的过程。CreateDecryptor() 函数可以使用密钥解密数据。我们必须将字符串键传递给 CreateEncryptor() 函数。密钥必须与 CreateDecryptor() 函数中使用的密钥相同。以下代码示例向我们展示了如何使用 C# 中的 CreateDecryptor() 函数根据 AES 算法对字符串进行加密。

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace encrypt_decrypt_string
{
    class Program
    {
        static string Decrypt()
        {
            try
            {
                string textToDecrypt = "6+PXxVWlBqcUnIdqsMyUHA==";
                string ToReturn = "";
                string publickey = "12345678";
                string secretkey = "87654321";
                byte[] privatekeyByte = { };
                privatekeyByte = System.Text.Encoding.UTF8.GetBytes(secretkey);
                byte[] publickeybyte = { };
                publickeybyte = System.Text.Encoding.UTF8.GetBytes(publickey);
                MemoryStream ms = null;
                CryptoStream cs = null;
                byte[] inputbyteArray = new byte[textToDecrypt.Replace(" ", "+").Length];
                inputbyteArray = Convert.FromBase64String(textToDecrypt.Replace(" ", "+"));
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    ms = new MemoryStream();
                    cs = new CryptoStream(ms, des.CreateDecryptor(publickeybyte, privatekeyByte), CryptoStreamMode.Write);
                    cs.Write(inputbyteArray, 0, inputbyteArray.Length);
                    cs.FlushFinalBlock();
                    Encoding encoding = Encoding.UTF8;
                    ToReturn = encoding.GetString(ms.ToArray());
                }
                return ToReturn;
            }
            catch (Exception ae)
            {
                throw new Exception(ae.Message, ae.InnerException);
            }
        }
        static void Main(string[] args)
        {
            string decrypted = Decrypt();
            Console.WriteLine(decrypted);
        }
    }
}

输出:

WaterWorld

在上面的代码中,我们将上一示例中的加密字符串 6+PXxVWlBqcUnIdqsMyUHA== 转换回其原始形式 WaterWorld,并以 publickeysecretkey 作为密钥。该键必须与上一个示例中使用的键相同,此方法才能起作用。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

相关文章 - Csharp String