📅  最后修改于: 2023-12-03 14:59:41.808000             🧑  作者: Mango
在 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
对象中,并将其转换为字符串返回。
这只是一个简单的示例,实际应用中,我们可以使用更安全和更复杂的加密算法,并在生成密钥和向量时使用更严格的方法来保护我们的数据。
参考资料: