フッターコンテンツにスキップ
.NETヘルプ

C# AES暗号化(開発者向けの仕組み)

AES(高度暗号化標準)は、最も一般的に使用される対称暗号化アルゴリズムの1つです。 データを暗号化および復号化するために同じキーを使用するため、AES暗号化は多くのアプリケーションで機密データを保護するために効率的かつ高速です。

このチュートリアルでは、C#でのAES暗号化に焦点を当て、AESクラスを使用してデータを暗号化および復号化し、IronPDFライブラリを使用します。 実践的な例を取り上げ、暗号化プロセスを通じて解説し、セキュリティを向上させるためにブロック連鎖暗号モード (CBC) の使用方法を紹介します。 暗号化キーの管理と初期化ベクトル (IV) の役割についても議論します。

Introduction of AES Encryption in C

高度暗号化標準 (AES) は、国家標準技術研究所 (NIST) によって標準化された対称暗号化アルゴリズムです。 アルゴリズムは128ビット、192ビット、または256ビットのキーサイズを持ち、機密データの暗号化に非常に安全です。 データを暗号化および復号化するために同じ暗号化キーを使用します。

AESは元のデータをブロックに分割し、それらのブロックに対して変換を施すことで動作します。 CBC(暗号ブロック連鎖)やECB(電子コードブック)など、異なる暗号モードで動作し、それぞれ異なるセキュリティ機能を提供します。

How AES Works in C

C#のAES暗号化アルゴリズムはSystem.Security.Cryptography名前空間の一部です。 この名前空間にはAESクラスが含まれており、これを使用してAESのインスタンスを作成し、キーサイズ、暗号モード、パディングモードを指定し、秘密キーを使用してデータを暗号化および復号化できます。

C#でAESを使用するには、次の基本的な手順に従います。

  1. Aes.Create() を使用して AES クラスのインスタンスを作成します。
  2. キー、IV、および暗号モードなどの関連パラメータを設定します。
  3. ICryptoTransformインターフェイスを使用してデータを暗号化し、MemoryStreamに書き込みます。
  4. 同じキーとIVを使用してデータを復号化します。

C#で基本的な暗号化プロセスと復号プログラムを作成しましょう。

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

class Program
{
    // Declare a static byte array for encrypted data
    public static byte[] encryptedData;

    // Main method to demonstrate encryption and decryption
    public static void Main(string[] args)
    {
        // String plaintext to be encrypted
        string plaintext = "This is some sensitive data!";
        string key = "abcdefghijklmnop"; // 128-bit key (16 characters)

        // Encrypt the plaintext
        string ciphertext = Encrypt(plaintext, key);
        Console.WriteLine("Encrypted Data: " + ciphertext);

        // Decrypt the ciphertext
        string decryptedData = Decrypt(ciphertext, key);
        Console.WriteLine("Decrypted Data: " + decryptedData);
    }

    // Method to encrypt data
    public static string Encrypt(string plaintext, string key)
    {
        // Create a new instance of the AES encryption algorithm
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[16]; // Initialization vector (IV)

            // Create an encryptor to perform the stream transform
            ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

            // Create the streams used for encryption
            using (MemoryStream ms = new MemoryStream())
            {
                // Create a CryptoStream using the encryptor
                using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter sw = new StreamWriter(cs))
                    {
                        sw.Write(plaintext);
                    }
                }
                // Store the encrypted data in the public static byte array
                encryptedData = ms.ToArray();
                return Convert.ToBase64String(encryptedData);
            }
        }
    }

    // Method to decrypt data
    public static string Decrypt(string ciphertext, string key)
    {
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[16]; // Initialization vector (IV)

            // Create a decryptor to perform the stream transform
            ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

            // Create the streams used for decryption
            using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(ciphertext)))
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader sr = new StreamReader(cs))
                    {
                        return sr.ReadToEnd();
                    }
                }
            }
        }
    }
}
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

class Program
{
    // Declare a static byte array for encrypted data
    public static byte[] encryptedData;

    // Main method to demonstrate encryption and decryption
    public static void Main(string[] args)
    {
        // String plaintext to be encrypted
        string plaintext = "This is some sensitive data!";
        string key = "abcdefghijklmnop"; // 128-bit key (16 characters)

        // Encrypt the plaintext
        string ciphertext = Encrypt(plaintext, key);
        Console.WriteLine("Encrypted Data: " + ciphertext);

        // Decrypt the ciphertext
        string decryptedData = Decrypt(ciphertext, key);
        Console.WriteLine("Decrypted Data: " + decryptedData);
    }

    // Method to encrypt data
    public static string Encrypt(string plaintext, string key)
    {
        // Create a new instance of the AES encryption algorithm
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[16]; // Initialization vector (IV)

            // Create an encryptor to perform the stream transform
            ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

            // Create the streams used for encryption
            using (MemoryStream ms = new MemoryStream())
            {
                // Create a CryptoStream using the encryptor
                using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter sw = new StreamWriter(cs))
                    {
                        sw.Write(plaintext);
                    }
                }
                // Store the encrypted data in the public static byte array
                encryptedData = ms.ToArray();
                return Convert.ToBase64String(encryptedData);
            }
        }
    }

    // Method to decrypt data
    public static string Decrypt(string ciphertext, string key)
    {
        using (Aes aes = Aes.Create())
        {
            aes.Key = Encoding.UTF8.GetBytes(key);
            aes.IV = new byte[16]; // Initialization vector (IV)

            // Create a decryptor to perform the stream transform
            ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

            // Create the streams used for decryption
            using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(ciphertext)))
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader sr = new StreamReader(cs))
                    {
                        return sr.ReadToEnd();
                    }
                }
            }
        }
    }
}
$vbLabelText   $csharpLabel

C# AES 暗号化 (開発者向けの仕組み): 図 1 - メモリ ストリームを使用した暗号化と復号化の出力

コードの説明

  1. Aes.Create(): AES 暗号化アルゴリズムの新しいインスタンスを作成します。
  2. aes.Key:暗号化と復号化の両方に使用されるキー。 サイズは128ビット(16バイト)、192ビット、または256ビットのように有効でなければなりません。
  3. aes.IV:初期化ベクトル (IV) は、暗号化プロセスをランダム化するために使用されます。 この例では、シンプルさのためにゼロのIVを使用します。
  4. MemoryStream:これにより、暗号化されたデータをバイト ストリームとして操作できるようになります。
  5. CryptoStream:データ ストリームを変換します (暗号化または復号化)。

高度な例: カスタムキーとIVを使用したAES暗号化

以前の例を基にして、ランダムキーIVを生成し、暗号化をより安全にします。

public static string EncryptData(string plaintext)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = new byte[32]; // AES-256 requires a 256-bit key (32 bytes)
        aes.IV = new byte[16];  // 128-bit block size

        // Randomly generate key and IV
        using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
        {
            rng.GetBytes(aes.Key); // Generate a random key
            rng.GetBytes(aes.IV);  // Generate a random IV
        }

        // Create an encryptor to perform the stream transform
        ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

        // Create the streams used for encryption
        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
            {
                using (StreamWriter sw = new StreamWriter(cs))
                {
                    sw.Write(plaintext);
                }
            }
            return Convert.ToBase64String(ms.ToArray());
        }
    }
}
public static string EncryptData(string plaintext)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = new byte[32]; // AES-256 requires a 256-bit key (32 bytes)
        aes.IV = new byte[16];  // 128-bit block size

        // Randomly generate key and IV
        using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
        {
            rng.GetBytes(aes.Key); // Generate a random key
            rng.GetBytes(aes.IV);  // Generate a random IV
        }

        // Create an encryptor to perform the stream transform
        ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

        // Create the streams used for encryption
        using (MemoryStream ms = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
            {
                using (StreamWriter sw = new StreamWriter(cs))
                {
                    sw.Write(plaintext);
                }
            }
            return Convert.ToBase64String(ms.ToArray());
        }
    }
}
$vbLabelText   $csharpLabel

この場合、関数が呼び出されるたびに新しいキーIVを生成します。 これにより、同じキーがすべての操作で使用されないため、より堅牢な暗号化が提供されます。 AESは128、192、256ビットのようなキーサイズをサポートしています

AESによるデータの復号化

復号化は、データを暗号化する逆プロセスです。 私たちの例では、暗号化に使用された同じキーとIVを提供してデータを復号化する必要があります。 復号化プロセスには、暗号化されたデータを元の形式に戻すことが含まれます。

ここでは、以前に暗号化されたデータを使用した例を紹介します。

public static string DecryptData(string ciphertext, byte[] key, byte[] iv)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = key;
        aes.IV = iv;

        // Create a decryptor to perform the stream transform
        ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

        // Create the streams used for decryption
        using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(ciphertext)))
        {
            using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader sr = new StreamReader(cs))
                {
                    return sr.ReadToEnd();
                }
            }
        }
    }
}
public static string DecryptData(string ciphertext, byte[] key, byte[] iv)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = key;
        aes.IV = iv;

        // Create a decryptor to perform the stream transform
        ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

        // Create the streams used for decryption
        using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(ciphertext)))
        {
            using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader sr = new StreamReader(cs))
                {
                    return sr.ReadToEnd();
                }
            }
        }
    }
}
$vbLabelText   $csharpLabel

このコードは暗号化されたデータ元のデータに戻します。

AES暗号化を使用したIronPDF

IronPDFは、シンプルで開発者フレンドリーな.NETライブラリで、簡単なC#コードを使用してPDFを生成、編集、および操作するために設計されています。 開発者がHTML、CSS、およびJavaScriptから直接PDFドキュメントを作成することを可能にし、動的なレポート、請求書、その他のドキュメントの生成に非常に便利です。 マージ、分割、さらにはパスワードやデジタル署名などのセキュリティ機能を追加するサポートを備えたIronPDFは、.NETアプリケーションでのPDF生成の包括的なソリューションです。

AES暗号化との統合によるIronPDFの活用

C# AES 暗号化 (開発者向けの仕組み): 図 2 - IronPDF

機密レポートやドキュメントを生成する際には、PDF内のデータが共有前に暗号化されていることを保証する必要があるかもしれません。 AES(高度暗号化標準)暗号化は、PDFファイルの内容を安全に暗号化するための完璧なソリューションです。 IronPDFとAES暗号化を組み合わせることで、PDF内のデータを保護しつつ、ドキュメント自体と連携できるようにします。

ステップ1:IronPDFを使用したPDFの作成

ChromePdfRendererクラスを使用してHTMLコンテンツからPDFを生成し、ファイルに保存します。

var htmlContent = "<h1>Confidential</h1><p>This is sensitive data.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs(@"C:\Reports\ConfidentialReport.pdf");
var htmlContent = "<h1>Confidential</h1><p>This is sensitive data.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs(@"C:\Reports\ConfidentialReport.pdf");
$vbLabelText   $csharpLabel

ステップ2:AESを使用したPDFの暗号化

PDF が作成されたら、 AES で暗号化します。

byte[] pdfBytes = File.ReadAllBytes(@"C:\Reports\ConfidentialReport.pdf");
using (Aes aes = Aes.Create())
{
    aes.Key = Encoding.UTF8.GetBytes("abcdefghijklmnop");
    aes.IV = new byte[16];
    using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
    using (var ms = new MemoryStream())
    {
        using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
        {
            cs.Write(pdfBytes, 0, pdfBytes.Length);
        }
        File.WriteAllBytes(@"C:\Reports\ConfidentialReport.encrypted", ms.ToArray());
    }
}
byte[] pdfBytes = File.ReadAllBytes(@"C:\Reports\ConfidentialReport.pdf");
using (Aes aes = Aes.Create())
{
    aes.Key = Encoding.UTF8.GetBytes("abcdefghijklmnop");
    aes.IV = new byte[16];
    using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
    using (var ms = new MemoryStream())
    {
        using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
        {
            cs.Write(pdfBytes, 0, pdfBytes.Length);
        }
        File.WriteAllBytes(@"C:\Reports\ConfidentialReport.encrypted", ms.ToArray());
    }
}
$vbLabelText   $csharpLabel

結論

C# AES 暗号化 (開発者向けの仕組み): 図 3 - ライセンス

IronPDFとAES暗号化を統合することで、アクセス可能でありながら暗号化された動的で安全なドキュメントを生成することができます。 安全なドキュメント生成を必要とするアプリケーションの開発や機密レポートの管理において、強固な暗号化との統合によってデータを保護します。 IronPDFはPDFの取り扱いを簡略化し、AESはコンテンツが安全であることを保証します。

IronPDFは無料トライアルを提供しており、開発者はその機能を検討する前に探索することが容易です。 プロジェクトにIronPDF を実装する準備ができている場合は、ライセンスは 1 回限りの購入で $799 から始まります。

よくある質問

C# で HTML を PDF に変換するにはどうすればいいですか?

IronPDF の RenderHtmlAsPdf メソッドを使用して、HTML 文字列を PDF に変換できます。RenderHtmlFileAsPdf を使用して HTML ファイルを PDF に変換することもできます。

AES 暗号化とは何か、C# でどのように使用されるのか?

AES (Advanced Encryption Standard) は、データを保護するために使用される対称暗号化アルゴリズムです。C# では、AES 暗号化は System.Security.Cryptography 名前空間の AES クラスを使用して実装されます。AES インスタンスを作成し、キーと IV パラメータを設定し、ICryptoTransform インターフェイスを使用してデータを暗号化および復号化します。

AES 暗号化で Cipher Block Chaining (CBC) モードを使用する利点とは?

Cipher Block Chaining (CBC) モードは、同一の平文ブロックが異なる暗号文ブロックを生成するようにすることでセキュリティを強化します。これは、初期化ベクトル (IV) を使用してブロックの暗号化を連鎖させることで達成されます。

C# で AES を使用して PDF ドキュメントを暗号化するにはどうすればよいですか?

C# で AES を使用して PDF を暗号化するには、IronPDF を利用して PDF ファイルを処理し、指定されたキーと IV で PDF バイトを暗号化してから、新しいファイルに暗号化されたデータを書き戻します。

C# アプリケーションで AES 暗号化を実装するには、どのようなステップが必要ですか?

C# で AES 暗号化を実装するには、AES インスタンスを作成し、キーと IV を設定して暗号化装置を作成し、MemoryStreamCryptoStream を使用してデータを変換します。

C# で AES 暗号化にカスタムキーと IV を使用できますか?

はい、AES 暗号化ではカスタムキーと IV を指定してセキュリティを強化することができます。各暗号化セッションごとにランダムな値を生成することが優れた保護のために推奨されます。

C# で開発者は PDF ドキュメントのセキュリティをどのように強化できますか?

開発者は IronPDF と AES 暗号化を組み合わせて C# で PDF ドキュメントのセキュリティを強化し、PDF の作成、編集、セキュリティの追加、パスワードやデジタル署名の追加を可能にします。

IronPDF は、共有前に PDF コンテンツをどのように保護しますか?

IronPDF は、開発者が AES を使用して PDF を暗号化できるようにすることで、共有前に PDF コンテンツを保護します。このプロセスは、暗号化メソッドを使用して PDF ファイルを生成、編集、および操作してデータ保護を保証します。

なぜ AES 暗号化でキー管理が重要なのか?

AES 暗号化では、暗号化されたデータのセキュリティが、暗号化キーの秘密性と強度に大きく依存しているため、キー管理が非常に重要です。適切な管理により不正アクセスを防ぎます。

C# 開発者向けの IronPDF ライブラリの主な機能とは?

IronPDF ライブラリは、C# 開発者が PDF ドキュメントを簡単に作成、編集、および操作できるようにします。マージ、分割、暗号化された PDF のセキュリティをサポートし、ドキュメント管理とセキュリティを強化します。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

彼の主要なIronPDFとIron Suite .NETライブラリは、世界中で3000万以上のNuGetインストールを達成し、彼の基礎となるコードは世界中で使用されている開発者ツールに力を与え続けています。25年の商業経験と41年のコーディングの専門知識を持つJacobは、次世代の技術リーダーを指導しながら、エンタープライズグレードのC#、Java、Python PDFテクノロジーにおけるイノベーションの推進に注力しています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me