在 C# 中加密和解密一個字串

  1. 使用 C# 中的 AesManaged 類加密字串
  2. 使用 C# 中的 AesManaged 類解密字串
在 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== 

在上面的程式碼中,我們以 publickeysecretkey 作為金鑰對字串 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,並以 publickeysecretkey 作為金鑰。該鍵必須與上一個示例中使用的鍵相同,此方法才能起作用。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

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

相關文章 - Csharp String