C# で文字列を暗号化および復号化
このチュートリアルでは、C# で文字列を暗号化および復号化する方法について説明します。
C# の AesManaged
クラスで文字列を暗号化する
暗号化は、データを暗号文に変換して、許可されていない個人がデータにアクセスできないようにするプロセスです。このチュートリアルでは、Advanced Encryption Standard
(AES)アルゴリズムを使用して、C# で文字列を暗号化および復号化します。AesManaged
クラスは、AES アルゴリズムを使用して文字列を暗号化および復号化するメソッドを提供します。[CreateEncryptor()
関数](https://learn.microsoft.com/ja-jp/previous-versions/windows/silverlight/dotnet-windows-silverlight/bb360013(v=vs.95/)は、キーを使用してデータを暗号化できます。文字列キーを 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==
上記のコードでは、文字列 WaterWorld
を publickey
と secretkey
をキーとして暗号化し、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==
を前の例から、publickey
と secretkey
をキーとして元の形式 WaterWorld
に変換しました。この方法を機能させるには、キーが前の例で使用したキーと同じである必要があります。
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