在 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
作为密钥。该键必须与上一个示例中使用的键相同,此方法才能起作用。
相关文章
在 C# 中将整数转换为布尔值
发布时间:2024/01/03 浏览次数:71 分类:编程语言
-
在 C# 中,有两种主要方法可用于将整数转换为布尔值:Convert.ToBoolean()函数和 switch 语句。
在 C# 中将 Long 转换为整数
发布时间:2024/01/03 浏览次数:68 分类:编程语言
-
有两种主要方法可用于将长变量转换为 C# 中的整数变量,即类型转换方法和 Convert.ToInt32()函数。
在 C# 中将 Int 转换为十六进制
发布时间:2024/01/03 浏览次数:156 分类:编程语言
-
ToString()函数可用于将整数值转换为十六进制字符串,而 Convert.ToInt32()函数可用于将十六进制字符串转换为 C# 中的整数值。
在 C# 中对 DataTable 进行排序
发布时间:2024/01/03 浏览次数:160 分类:编程语言
-
可使用两种主要方法对 C# 中的数据表进行排序:DataView.Sort 属性和 DataTable.DefaultView 属性。
在 C# 中读取 JSON 文件
发布时间:2024/01/03 浏览次数:146 分类:编程语言
-
Json.net 命名空间内的 JsonConvert 类可用于在 C# 中对 JSON 文件执行读取和写入操作。
C# 中的 DateTime 中设置 null 值
发布时间:2024/01/03 浏览次数:91 分类:编程语言
-
在本文中,你将了解 DateTime 对象的基础知识以及如何在 C# 中使用它来分配空值。