C# で文字列を暗号化および復号化

Muhammad Maisam Abbas 2024年2月16日
  1. C# の AesManaged クラスで文字列を暗号化する
  2. C# の AesManaged クラスで文字列を復号化する
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==

上記のコードでは、文字列 WaterWorldpublickeysecretkey をキーとして暗号化し、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== を前の例から、publickeysecretkey をキーとして元の形式 WaterWorld に変換しました。この方法を機能させるには、キーが前の例で使用したキーと同じである必要があります。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

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

関連記事 - Csharp String