ホームページ >バックエンド開発 >C#.Net チュートリアル >C# におけるファイル暗号化および復号化アルゴリズムの一般的な問題

C# におけるファイル暗号化および復号化アルゴリズムの一般的な問題

PHPz
PHPzオリジナル
2023-10-09 16:07:41697ブラウズ

C# におけるファイル暗号化および復号化アルゴリズムの一般的な問題

C# での一般的なファイル暗号化および復号化アルゴリズムの問​​題には、特定のコード例が必要です

現代のコンピューター アプリケーションでは、データ保護とセキュリティが特に重要です。ファイルの暗号化および復号化アルゴリズムは、送信中および保存中に権限のない担当者によってファイルがアクセスされたり変更されたりしないようにするために、一般的に使用されるデータ セキュリティ保護手段です。この記事では、C# における一般的なファイル暗号化および復号化アルゴリズムの問​​題を調査し、対応する具体的なコード例を示します。

    #対称暗号化アルゴリズム
対称暗号化アルゴリズムは、暗号化と復号化に同じキーを使用するアルゴリズムです。 C# の一般的な対称暗号化アルゴリズムには、DES、AES、RC4 などがあります。ここでは、DES アルゴリズムを例として、ファイルの暗号化と復号化の具体的な実装を示します。

最初に、ランダム キーを生成する関数を定義する必要があります:

public static byte[] GenerateRandomKey()
{
    byte[] key = new byte[8];
    using (var rng = new RNGCryptoServiceProvider())
    {
        rng.GetBytes(key);
    }
    return key;
}

次に、生成されたキーを使用してファイルを暗号化および復号化できます。ファイル暗号化に DES アルゴリズムを使用する例を次に示します。

public static void EncryptFile(string inputFile, string outputFile, byte[] key)
{
    using (var des = new DESCryptoServiceProvider())
    {
        des.Key = key;
        des.Mode = CipherMode.ECB;
        using (var fsInput = new FileStream(inputFile, FileMode.Open, FileAccess.Read))
        {
            using (var fsOutput = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
            {
                using (var cryptoStream = new CryptoStream(fsOutput, des.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    byte[] buffer = new byte[1024];
                    int bytesRead;
                    while ((bytesRead = fsInput.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        cryptoStream.Write(buffer, 0, bytesRead);
                    }
                }
            }
        }
    }
}

上記のコード例では、DESCryptoServiceProvider クラスを使用して DES 暗号化アルゴリズムのインスタンスを作成します。次に、CreateEncryptor メソッドを使用してエンクリプタを生成し、暗号化されたデータを出力ファイルに書き込みます。

ファイルを復号化するプロセスは暗号化と似ていますが、暗号化プログラムの作成を復号化プログラムの作成に変更するだけです。 DES アルゴリズムを使用したファイル復号化の例を次に示します。

public static void DecryptFile(string inputFile, string outputFile, byte[] key)
{
    using (var des = new DESCryptoServiceProvider())
    {
        des.Key = key;
        des.Mode = CipherMode.ECB;
        using (var fsInput = new FileStream(inputFile, FileMode.Open, FileAccess.Read))
        {
            using (var fsOutput = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
            {
                using (var cryptoStream = new CryptoStream(fsOutput, des.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    byte[] buffer = new byte[1024];
                    int bytesRead;
                    while ((bytesRead = fsInput.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        cryptoStream.Write(buffer, 0, bytesRead);
                    }
                }
            }
        }
    }
}

    非対称暗号化アルゴリズム
非対称暗号化アルゴリズムは、暗号化にキーのペアを使用し、公開鍵と秘密鍵を含む復号化アルゴリズム。 C# の一般的な非対称暗号化アルゴリズムには、RSA と DSA があります。

非対称暗号化アルゴリズムを使用してファイルを暗号化および復号化する場合は、最初にキーのペアを生成する必要があります。以下は、RSA アルゴリズムを使用してキーを生成する例です。

public static void GenerateKeyPair(out string publicKey, out string privateKey)
{
    using (var rsa = new RSACryptoServiceProvider())
    {
        publicKey = rsa.ToXmlString(false);
        privateKey = rsa.ToXmlString(true);
    }
}

キーを生成した後、公開キーを使用してファイルを暗号化し、秘密キーを使用してファイルを復号化できます。ファイル暗号化に RSA アルゴリズムを使用する例を次に示します。

public static void EncryptFile(string inputFile, string outputFile, string publicKey)
{
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.FromXmlString(publicKey);
        using (var fsInput = new FileStream(inputFile, FileMode.Open, FileAccess.Read))
        {
            using (var fsOutput = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
            {
                using (var cryptoStream = new CryptoStream(fsOutput, rsa.Encryptor, CryptoStreamMode.Write))
                {
                    byte[] buffer = new byte[1024];
                    int bytesRead;
                    while ((bytesRead = fsInput.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        cryptoStream.Write(buffer, 0, bytesRead);
                    }
                }
            }
        }
    }
}

上記のコード例では、公開キーに基づいて RSACryptoServiceProvider インスタンスを作成し、Encryptor 属性を使用して暗号化子を取得し、暗号化されたデータをファイルに出力します。

ファイルを復号化するプロセスは暗号化と似ていますが、暗号化プログラムの作成を復号化プログラムの作成に変更するだけです。ファイル復号化に RSA アルゴリズムを使用する例を次に示します。

public static void DecryptFile(string inputFile, string outputFile, string privateKey)
{
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.FromXmlString(privateKey);
        using (var fsInput = new FileStream(inputFile, FileMode.Open, FileAccess.Read))
        {
            using (var fsOutput = new FileStream(outputFile, FileMode.Create, FileAccess.Write))
            {
                using (var cryptoStream = new CryptoStream(fsOutput, rsa.Decryptor, CryptoStreamMode.Write))
                {
                    byte[] buffer = new byte[1024];
                    int bytesRead;
                    while ((bytesRead = fsInput.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        cryptoStream.Write(buffer, 0, bytesRead);
                    }
                }
            }
        }
    }
}

概要:

ファイル暗号化および復号化アルゴリズムは、データ セキュリティを保護する重要な手段です。この記事では、C# の一般的な対称および非対称暗号化アルゴリズムを紹介し、対応するコード例を示します。これらの暗号化アルゴリズムを理解して適用することで、ファイルの機密性と完全性を保護し、送信および保存中のデータのセキュリティを確保できます。

以上がC# におけるファイル暗号化および復号化アルゴリズムの一般的な問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。