在 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