C# での AES 暗号化

Haider Ali 2023年10月12日
  1. C# での AES 暗号化
  2. 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?

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

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

著者: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn