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 は、暗号化されたキーを作成するために必要なすべてのメソッドに使用されます。 それでは、このライブラリで使用されるクラス CryptoStreamMemoryStream について説明しましょう。

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?

上記のコードは、すべてのメッセージを暗号化します。 データが暗号化されると、ユーザーのみがアクセスできます。

このデータを読み取る方法は、復号化することです。 その後、データのみが表示されます。