HOWTO · Csharp
C# での AES 暗号化
この記事では、C# での AES 暗号化について説明します。
このページの内容
このガイドでは、C# での AES 暗号化について学習します。
C# での AES 暗号化
私たちが話しているアルゴリズムは、AES または Advanced Encryption Standard です。 この対称的に暗号化されたアルゴリズムは、送信者と受信者の両方に、同じキーを使用してデータを暗号化または復号化する許可を与えます。
このアルゴリズムは、3 ビット暗号化モードをサポートしています。 128、192、および 256 ビットの暗号化。
AES は、暗号化されたキーを作成するのに役立ち、使用する必要のあるクラスと関数を提供します。 政府および民間企業は、高度な暗号化標準 (AES) をテストしました。
C# での AES 暗号化の作業
ライブラリ System.Security.Cryptography は、暗号化されたキーを作成するために必要なすべてのメソッドに使用されます。 それでは、このライブラリで使用されるクラス CryptoStream と MemoryStream について説明しましょう。
CryptoStream は、上記のモードからの任意のストリームを格納します。 コンパイラがモードをサポートしている場合、任意のストリームを暗号化および復号化できます。
クラス MemoryStream は、クラスがストリームを実装するためにストリームを格納するときに使用されます。 この場合、CryptoStream が使用されているため、MemoryStream がストリームを実装します。
次に使用されるクラスは、AES アルゴリズムを管理する AesManaged です。 最後に使用されるクラスは StreamWriter で、ストリームに文字を書き込むため、AES 暗号化を使用する必要がある場合は、このクラスを使用することが不可欠です。
コードに入る前に、例外処理を使用することが重要です。
コード - メイン クラス:
using System;
using System.IO;
using System.Security.Cryptography;
namespace ConsoleApp1 {
class Program {
static void Main(string[] args) {
Console.WriteLine("Write any string to encrypt: ");
string text = Console.ReadLine();
EncryptedDATA(text); // write text to be encrypted
Console.Read();
}
}
}
コード - ユーザーからの文字列入力を受け取る関数:
static void EncryptedDATA(string TextToEncrypt) {
try {
using (AesManaged dataEncrypt = new AesManaged()) {
byte[] TextEncrypted = Encrypt(TextToEncrypt, dataEncrypt.Key, dataEncrypt.IV);
// passing the string data inside the Encrypt() function
string myLine = $"the data encrypted is:{System.Text.Encoding.UTF8.GetString(TextEncrypted)}";
Console.WriteLine(myLine); // printing the encrypted data
}
} catch (Exception EX) // exception handling
{
Console.WriteLine(EX.Message);
}
}
コード - データを暗号化する関数:
static byte[] Encrypt(string TextToEncrypt, byte[] encrypt, byte[] IV) {
byte[] EncryptedText;
using (AesManaged AESencrypt = new AesManaged()) // using a AesManaged function
{
ICryptoTransform DataEncrypt =
AESencrypt.CreateEncryptor(encrypt, IV); // here we are creating an encryptor
using (MemoryStream memory = new MemoryStream()) // using a MemoryStream function
{
using (CryptoStream crypto = new CryptoStream(memory, DataEncrypt, CryptoStreamMode.Write))
// using a CryptoStream function to store and write stream
{
{
using (StreamWriter stream = new StreamWriter(crypto))
stream.Write(TextToEncrypt); // wrting stream
EncryptedText = memory.ToArray(); // storing stream
}
}
}
return EncryptedText;
}
AES 暗号化での操作中にエラーが表示される場合があります。 これらのエラーを処理するには、例外処理を使用します。
完全なソース コード:
using System;
using System.IO;
using System.Security.Cryptography;
class Program {
static void Main(string[] args) {
Console.WriteLine("Write any string to encrypt: ");
string text = Console.ReadLine();
EncryptedDATA(text); // write text to be encrypted
Console.Read();
}
static void EncryptedDATA(string TextToEncrypt) {
try {
using (AesManaged dataEncrypt = new AesManaged()) {
byte[] TextEncrypted = Encrypt(TextToEncrypt, dataEncrypt.Key, dataEncrypt.IV);
// passing the string data inside the Encrypt() function
string myLine =
$"the data encrypted is: {System.Text.Encoding.UTF8.GetString(TextEncrypted)}";
Console.WriteLine(myLine); // printing the encrypted data
}
} catch (Exception EX) // exception handling
{
Console.WriteLine(EX.Message);
}
}
static byte[] Encrypt(string TextToEncrypt, byte[] encrypt, byte[] IV) {
byte[] EncryptedText;
using (AesManaged AESencrypt = new AesManaged()) // using a AesManaged function
{
ICryptoTransform DataEncrypt =
AESencrypt.CreateEncryptor(encrypt, IV); // here we are creating an encryptor
using (MemoryStream memory = new MemoryStream()) // using a MemoryStream function
{
using (
CryptoStream crypto = new CryptoStream(
memory, DataEncrypt,
CryptoStreamMode.Write)) // using a CryptoStream function to store and write stream
{
{
using (StreamWriter stream = new StreamWriter(crypto))
stream.Write(TextToEncrypt); // wrting stream
EncryptedText = memory.ToArray(); // storing stream
}
}
}
return EncryptedText;
}
}
}
出力:
Write any string to encrypt:
Hello
the data encrypted is: ??*?2?@???W@G?
上記のコードは、すべてのメッセージを暗号化します。 データが暗号化されると、ユーザーのみがアクセスできます。
このデータを読み取る方法は、復号化することです。 その後、データのみが表示されます。