在 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