在 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