跳至頁尾內容
.NET 幫助

BouncyCastle C#(開發者使用方法)

BouncyCastle C#是一個綜合性的函式庫,為 .NET 開發人員提供多種加密演算法和工具。 本指南旨在向初學者介紹充氣城堡的基礎知識,重點介紹其作為安全保障的功能,並提供日常使用的實際範例。 我們還將學習如何將其與IronPDF .NET PDF 庫一起使用。

充氣城堡簡介

Bouncy Castle 在密碼安全領域中脫穎而出,成為一個強大且用途廣泛的庫。 這是一個註冊的澳洲慈善項目,旨在為 Java 和 C# 提供高品質的安全服務。 該庫採用基於 MIT X 聯盟許可證的許可進行維護,鼓勵廣泛使用和貢獻。

了解充氣城堡的用途

Bouncy Castle 是一家安全服務供應商,提供種類繁多的加密演算法。 它的多功能性使其能夠滿足各種安全需求,從基本加密到複雜的數位簽章。 對於初學者來說,了解充氣城堡的範圍是將其有效應用於專案中的關鍵。

C# 中 Bouncy Castle 入門

在 C# 中實作 Bouncy Castle 首先要設定環境並了解其基本元件。

設定

下載庫:要開始使用,請從官方充氣城堡網站下載最新版本的充氣城堡軟體包。 請務必選擇符合專案需求的正確版本。

整合到您的專案中:下載後,將 Bouncy Castle 整合到您的 C# 專案中。 這通常需要在項目設定中添加該庫作為引用。

您也可以使用 NuGet 套件管理員下載並安裝它,只需在 NuGet 套件管理員的搜尋列中搜尋"Bouncycastle"即可。

BouncyCastle C#(開發者使用方法):圖 1 - 使用 NuGet 套件管理員下載並安裝 BouncyCastle,只需在 NuGet 套件管理員的搜尋列中搜尋"Bouncycastle"即可。

基本加密範例

在這個例子中,我將示範一個使用 C# 中的 Bouncy Castle 和 AES(高級加密標準)的簡單加密場景。

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Modes;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using System.Text;

public class SimpleEncryption
{
    /// <summary>
    /// Encrypts data using AES encryption with a given password.
    /// </summary>
    /// <param name="message">The message to encrypt.</param>
    /// <param name="password">The password for key derivation.</param>
    /// <returns>The encrypted message as a byte array.</returns>
    public static byte[] EncryptData(string message, string password)
    {
        // Generate a random salt
        var salt = new byte[8];
        new SecureRandom().NextBytes(salt);

        // Derive key and IV from the password and salt
        Pkcs5S2ParametersGenerator generator = new Pkcs5S2ParametersGenerator();
        generator.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt, 1000);
        ParametersWithIV keyParam = (ParametersWithIV)generator.GenerateDerivedMacParameters(256 + 128);

        // Create AES cipher in CBC mode with PKCS7 padding
        var cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(new AesEngine()));
        cipher.Init(true, keyParam);

        // Convert message to byte array and encrypt
        byte[] inputBytes = Encoding.UTF8.GetBytes(message);
        byte[] outputBytes = new byte[cipher.GetOutputSize(inputBytes.Length)];
        int length = cipher.ProcessBytes(inputBytes, 0, inputBytes.Length, outputBytes, 0);
        cipher.DoFinal(outputBytes, length);

        return outputBytes;
    }
}
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Modes;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using System.Text;

public class SimpleEncryption
{
    /// <summary>
    /// Encrypts data using AES encryption with a given password.
    /// </summary>
    /// <param name="message">The message to encrypt.</param>
    /// <param name="password">The password for key derivation.</param>
    /// <returns>The encrypted message as a byte array.</returns>
    public static byte[] EncryptData(string message, string password)
    {
        // Generate a random salt
        var salt = new byte[8];
        new SecureRandom().NextBytes(salt);

        // Derive key and IV from the password and salt
        Pkcs5S2ParametersGenerator generator = new Pkcs5S2ParametersGenerator();
        generator.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt, 1000);
        ParametersWithIV keyParam = (ParametersWithIV)generator.GenerateDerivedMacParameters(256 + 128);

        // Create AES cipher in CBC mode with PKCS7 padding
        var cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(new AesEngine()));
        cipher.Init(true, keyParam);

        // Convert message to byte array and encrypt
        byte[] inputBytes = Encoding.UTF8.GetBytes(message);
        byte[] outputBytes = new byte[cipher.GetOutputSize(inputBytes.Length)];
        int length = cipher.ProcessBytes(inputBytes, 0, inputBytes.Length, outputBytes, 0);
        cipher.DoFinal(outputBytes, length);

        return outputBytes;
    }
}
$vbLabelText   $csharpLabel

此程式碼片段示範如何使用 Bouncy Castle 的加密庫在 C# 中建立基本加密方法。 若要使用此方法,您需要呼叫EncryptData函數,傳入您要加密的訊息和密碼。 例如:

string message = "Hello, this is a test message!";
string password = "StrongPassword123";
byte[] encryptedMessage = SimpleEncryption.EncryptData(message, password);
Console.WriteLine("Original Message: " + message);
Console.WriteLine("Encrypted Message: " + BitConverter.ToString(encryptedMessage));
string message = "Hello, this is a test message!";
string password = "StrongPassword123";
byte[] encryptedMessage = SimpleEncryption.EncryptData(message, password);
Console.WriteLine("Original Message: " + message);
Console.WriteLine("Encrypted Message: " + BitConverter.ToString(encryptedMessage));
$vbLabelText   $csharpLabel

這個例子非常基礎,僅用作入門介紹。 在實際應用中,您應該考慮更穩健的做法,例如將鹽值和初始化向量與加密資料一起存儲,並處理加密過程中可能拋出的異常。

! BouncyCastle C#(開發者使用方法):圖 2 - 控制台輸出

進階用法和自訂

充氣城堡的功能並不限於基本功能。 它允許自訂設置,並支援高級加密演算法。

NTRU Prime 和其他高級演算法

Bouncy Castle 支援多種演算法,包括高級NTRU Prime 演算法。 這使得開發人員能夠靈活地選擇最適合其特定需求的演算法。

異常處理和安全最佳實踐

在密碼學應用中,正確的異常處理至關重要。 Bouncy Castle 的方法可能會拋出異常,正確處理這些異常可以確保應用程式的健全性和安全性。

將 IronPDF 與充氣城堡結合起來

BouncyCastle C#(開發者使用方法):圖 3 - IronPDF for .NET:C# PDF 函式庫

IronPDF與 Bouncy Castle 相輔相成,提供了處理 PDF 文件的功能,然後可以使用 Bouncy Castle 的加密功能來保護這些文件。 以下是如何整合這兩個強大的庫的方法:

IronPDF 的突出特點是其HTML 轉 PDF 轉換功能,能夠保留所有佈局和樣式。 它可以將網頁內容轉換為 PDF 文件,適用於報告、發票和文件。 您可以將 HTML 檔案、URL 和 HTML 字串無縫轉換為 PDF。

開始使用 IronPDF

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
$vbLabelText   $csharpLabel

使用 NuGet 套件管理器安裝

若要使用 NuGet 套件管理器將 IronPDF 整合到您的 Bouncy Castle C# 專案中,請依照下列步驟操作:

  1. 開啟 Visual Studio,在解決方案資源管理器中,以滑鼠右鍵按一下您的專案。
  2. 從上下文選單中選擇"管理 NuGet 套件…"。
  3. 前往瀏覽標籤並蒐尋 IronPDF。
  4. 從搜尋結果中選擇 IronPDF 庫,然後按一下安裝按鈕。
  5. 接受任何許可協議提示。

如果要透過套件管理器控制台將 IronPDF 新增至專案中,請在套件管理器控制台中執行下列命令:

Install-Package IronPdf

它會將 IronPDF 取得並安裝到您的專案中。

使用 NuGet 網站安裝

如需詳細了解 IronPDF,包括其功能、相容性和其他下載選項,請造訪 NuGet 網站上的 IronPDF 頁面。https://www.nuget.org/packages/IronPdf

透過 DLL 安裝

或者,您也可以使用 IronPDF 的 DLL 檔案將其直接整合到您的專案中。請從IronPDF 直接下載頁面下載包含 DLL 的 ZIP 檔案。 解壓縮文件,並將 DLL 文件包含在您的專案中。

使用 IronPDF 產生 PDF

首先,讓我們使用 IronPDF 建立一個簡單的 PDF 文件

using IronPdf;

public class PdfGenerator
{
    /// <summary>
    /// Creates a simple PDF from HTML content.
    /// </summary>
    /// <param name="filePath">The file path to save the PDF.</param>
    /// <param name="content">The HTML content to render as PDF.</param>
    public static void CreateSimplePdf(string filePath, string content)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(content);
        pdf.SaveAs(filePath);
    }
}
using IronPdf;

public class PdfGenerator
{
    /// <summary>
    /// Creates a simple PDF from HTML content.
    /// </summary>
    /// <param name="filePath">The file path to save the PDF.</param>
    /// <param name="content">The HTML content to render as PDF.</param>
    public static void CreateSimplePdf(string filePath, string content)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(content);
        pdf.SaveAs(filePath);
    }
}
$vbLabelText   $csharpLabel

在這段程式碼中,我們使用 IronPDF 的ChromePdfRenderer類別將 HTML 內容渲染為 PDF 並將其儲存到檔案中。

使用充氣城堡加密 PDF

產生 PDF 檔案後,我們可以使用 Bouncy Castle 加密。 這裡,我們將修改EncryptData方法以處理 PDF 檔案:

using System.IO;
using System.Text;

// ... [Previous Bouncy Castle using statements]

public class PdfEncryption
{
    /// <summary>
    /// Encrypts a PDF file using AES encryption.
    /// </summary>
    /// <param name="inputFilePath">The path to the input PDF file.</param>
    /// <param name="outputFilePath">The path to save the encrypted PDF file.</param>
    /// <param name="password">The password used for encryption.</param>
    public static void EncryptPdfFile(string inputFilePath, string outputFilePath, string password)
    {
        // Read the PDF file
        byte[] pdfBytes = File.ReadAllBytes(inputFilePath);

        // Encrypt the PDF bytes
        byte[] encryptedBytes = SimpleEncryption.EncryptData(Encoding.UTF8.GetString(pdfBytes), password);

        // Write the encrypted bytes to a new file
        File.WriteAllBytes(outputFilePath, encryptedBytes);
    }
}
using System.IO;
using System.Text;

// ... [Previous Bouncy Castle using statements]

public class PdfEncryption
{
    /// <summary>
    /// Encrypts a PDF file using AES encryption.
    /// </summary>
    /// <param name="inputFilePath">The path to the input PDF file.</param>
    /// <param name="outputFilePath">The path to save the encrypted PDF file.</param>
    /// <param name="password">The password used for encryption.</param>
    public static void EncryptPdfFile(string inputFilePath, string outputFilePath, string password)
    {
        // Read the PDF file
        byte[] pdfBytes = File.ReadAllBytes(inputFilePath);

        // Encrypt the PDF bytes
        byte[] encryptedBytes = SimpleEncryption.EncryptData(Encoding.UTF8.GetString(pdfBytes), password);

        // Write the encrypted bytes to a new file
        File.WriteAllBytes(outputFilePath, encryptedBytes);
    }
}
$vbLabelText   $csharpLabel

在這個方法中,我們將 PDF 檔案讀取為位元組,使用我們先前定義的SimpleEncryption類別對這些位元組進行加密,然後將加密後的位元組寫入新檔案。

結論

! BouncyCastle C#(開發者使用方法):圖 5 - IronPDF 許可信息

總而言之,Bouncy Castle C# 和 IronPDF 的結合為在 .NET 應用程式中建立和保護 PDF 文件提供了一種解決方案。 Bouncy Castle 提供保護資料所需的加密工具,而 IronPDF 則帶來了建立和操作 PDF 的便利性。 這種整合在需要高度文件安全性和保密性的場景中尤其有價值。

對於有興趣探索 IronPDF 的用戶,該庫提供免費試用版,允許開發人員試驗和評估其功能。 如果您決定將 IronPDF 整合到您的生產環境中,我們將提供授權資訊和選項

常見問題解答

如何使用 BouncyCastle 在 .NET 應用程式中實作加密?

要在 .NET 應用程式中實作加密,可以使用 BouncyCastle 函式庫,它提供了豐富的加密演算法。您可以從其官方網站或透過 NuGet 套件管理器下載該庫,然後將其作為引用添加到您的專案中。

如何在 C# 中將 HTML 轉換為 PDF?

您可以使用 IronPDF 在 C# 中將 HTML 轉換為 PDF,方法是利用RenderHtmlAsPdf用於 HTML 字串)或RenderHtmlFileAsPdf (用於 HTML 檔案)等方法來產生 PDF 文件。

我可以保護 .NET 應用程式中產生的 PDF 檔案嗎?

是的,您可以保護 .NET 應用程式中產生的 PDF 檔案。使用 IronPDF 建立 PDF 檔案後,您可以使用 BouncyCastle 對其進行加密:首先將 PDF 檔案轉換為位元組數組,然後套用 AES 等加密演算法,最後將加密後的資料儲存到新檔案中。

如何在 C# 專案中將 BouncyCastle 與 PDF 庫整合?

要在 C# 專案中將 BouncyCastle 與 IronPDF 等 PDF 庫集成,可以使用 NuGet 套件管理器同時安裝這兩個庫。使用 IronPDF 建立 PDF,使用 BouncyCastle 為這些文件新增加密安全功能。

在 C# 中使用 BouncyCastle 的基本步驟是什麼?

首先透過 NuGet 套件管理員下載 BouncyCastle 庫,然後將其作為參考新增至您的 C# 專案。之後,您就可以使用其加密演算法進行各種操作,例如加密、解密和數位簽章。

購買前是否可以測試PDF庫的功能?

是的,IronPDF 提供免費試用版,開發者可以在決定購買授權之前,使用該版本探索和評估其功能,例如 HTML 轉 PDF 功能。

BouncyCastle 支援哪些高階加密演算法?

BouncyCastle 支援一系列高級加密演算法,包括 NTRU Prime 等尖端演算法,為開發人員選擇適合其應用程式的演算法提供了靈活性和安全性。

如何確保我在 C# 中的加密操作是安全的?

遵循最佳實踐,例如安全地儲存加密金鑰、正確處理異常情況以及在安全的環境中進行操作,以確保加密操作的安全,防止未經授權的存取。

我可以在.NET應用程式中管理PDF文件嗎?

是的,您可以使用 IronPDF 在 .NET 應用程式中管理 PDF 文件。它允許您建立、編輯 HTML 文件並將其轉換為 PDF,從而增強文件管理功能。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。