📜  c# 加密解密字符串 - C# (1)

📅  最后修改于: 2023-12-03 14:59:41.808000             🧑  作者: Mango

C# 加密解密字符串

在 C# 中,我们可以使用多种算法来加密和解密字符串,常用的算法包括 AES、DES 和 RSA 等。这些算法可以通过 C# 的加密库来实现。

以下是一个简单的示例,展示了如何使用 C# 的加密库将一个字符串加密并解密:

using System;
using System.Security.Cryptography;

namespace EncryptionDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string plaintext = "Hello World!";

            byte[] encrypted = EncryptString(plaintext);
            string decrypted = DecryptString(encrypted);

            Console.WriteLine("Plain text: {0}", plaintext);
            Console.WriteLine("Encrypted: {0}", Convert.ToBase64String(encrypted));
            Console.WriteLine("Decrypted: {0}", decrypted);
        }

        static byte[] EncryptString(string plaintext)
        {
            byte[] plaintextBytes = System.Text.Encoding.Unicode.GetBytes(plaintext);

            using (Aes aes = Aes.Create())
            {
                aes.Key = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
                aes.IV = new byte[] { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f };

                ICryptoTransform encryptor = aes.CreateEncryptor();

                byte[] encryptedBytes;

                using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                    {
                        cs.Write(plaintextBytes, 0, plaintextBytes.Length);
                    }
                    encryptedBytes = ms.ToArray();
                }

                return encryptedBytes;
            }
        }

        static string DecryptString(byte[] encryptedBytes)
        {
            using (Aes aes = Aes.Create())
            {
                aes.Key = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
                aes.IV = new byte[] { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f };

                ICryptoTransform decryptor = aes.CreateDecryptor();

                byte[] decryptedBytes;

                using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
                    {
                        cs.Write(encryptedBytes, 0, encryptedBytes.Length);
                    }
                    decryptedBytes = ms.ToArray();
                }

                string decryptedText = System.Text.Encoding.Unicode.GetString(decryptedBytes);

                return decryptedText;
            }
        }
    }
}

在上面的代码中,我们首先定义了一个字符串 plaintext,然后调用 EncryptString 方法将其加密,返回值是一个字节数组 encrypted,用 Convert.ToBase64String 方法将其转换为 Base64 字符串,方便输出。接下来调用 DecryptString 方法将 encrypted 解密,然后输出明文和加密后的字符串以及解密后的明文。

EncryptString 方法中,我们首先将明文字符串转换为字节数组,然后创建一个 Aes 实例并设置密钥和向量。我们还创建了一个 ICryptoTransform 对象,用于执行加密操作。最终将加密后的结果存储在一个 MemoryStream 对象中,并将其转换为字节数组返回。

DecryptString 方法中,我们创建了一个新的 Aes 实例并使用相同的密钥和向量。我们还创建了一个 ICryptoTransform 对象,用于执行解密操作。最终将解密后的结果存储在一个 MemoryStream 对象中,并将其转换为字符串返回。

这只是一个简单的示例,实际应用中,我们可以使用更安全和更复杂的加密算法,并在生成密钥和向量时使用更严格的方法来保护我们的数据。

参考资料: