在 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==
在上面的代码中,我们以 publickey
和 secretkey
作为密钥对字符串 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
,并以 publickey
和 secretkey
作为密钥。该键必须与上一个示例中使用的键相同,此方法才能起作用。
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