ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
AES(高度暗号化規格)は、最も一般的に使用されている対称暗号化アルゴリズムの1つです。 データの暗号化と復号化に同じキーを使用するため、AES 暗号化は多くのアプリケーションで機密データを効率的かつ高速に保護します。
このチュートリアルでは、C# での AES 暗号化に焦点を当て、AES クラスを使用してデータを暗号化および復号化し、C# での AES 暗号化について説明します。IronPDFライブラリ. 実用的な例を取り上げ、暗号化プロセスを歩き、Cipher Block Chaining の使用方法を説明します。(CBC)セキュリティを高めるモード。 また、暗号化キーの管理と初期化ベクトルの役割についても説明します。(IV).
高度暗号化規格(AES)は、米国国立標準技術研究所によって標準化された対称暗号化アルゴリズムです。(NIST). このアルゴリズムは、128、192、256ビットのキーサイズを持つことができ、機密データを暗号化するために非常に安全です。 データの暗号化と復号化には、同じ暗号化キーを使用します。
AESは、元のデータをブロックに分割し、それらのブロックに変換を適用することで機能します。 CBCのような異なる暗号モードで動作します。(暗号ブロック連鎖)および電子コードブック(ECB)これらのツールは、それぞれ異なるセキュリティ機能を提供しています。
C#のAES暗号化アルゴリズムは、System.Security.Cryptography名前空間の一部です。 この名前空間にはAESクラスが含まれており、AESのインスタンスを作成し、キー・サイズ、暗号モード、パディング・モードを指定し、秘密キーを使用してデータを暗号化および復号化することができます。
C#でAESを使用するには、以下の基本的な手順に従ってください:
Aes.Create を使用して AES クラスのインスタンスを作成します。().
鍵、IV、および暗号モードなどの関連パラメータを設定する。
ICryptoTransform インターフェイスを使用してデータを暗号化し、MemoryStream に書き込みます。
同じキーと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;
// static void Main
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);
}
public static string Encrypt(string plaintext, string key)
{
// AES algorithm
using (Aes aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = new byte[16]; // Initialization vector (IV)
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
using (MemoryStream ms = new MemoryStream())
{
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);
}
}
}
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)
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
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;
// static void Main
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);
}
public static string Encrypt(string plaintext, string key)
{
// AES algorithm
using (Aes aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = new byte[16]; // Initialization vector (IV)
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
using (MemoryStream ms = new MemoryStream())
{
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);
}
}
}
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)
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
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();
}
}
}
}
}
}
Imports System
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text
Friend Class Program
' Declare a static byte array for encrypted data
Public Shared encryptedData() As Byte
' static void Main
Public Shared Sub Main(ByVal args() As String)
' string plaintext to be encrypted
Dim plaintext As String = "This is some sensitive data!"
Dim key As String = "abcdefghijklmnop" ' 128-bit key (16 characters)
' Encrypt the plaintext
Dim ciphertext As String = Encrypt(plaintext, key)
Console.WriteLine("Encrypted Data: " & ciphertext)
' Decrypt the ciphertext
Dim decryptedData As String = Decrypt(ciphertext, key)
Console.WriteLine("Decrypted Data: " & decryptedData)
End Sub
Public Shared Function Encrypt(ByVal plaintext As String, ByVal key As String) As String
' AES algorithm
Using aes As Aes = System.Security.Cryptography.Aes.Create()
aes.Key = Encoding.UTF8.GetBytes(key)
aes.IV = New Byte(15){} ' Initialization vector (IV)
Dim encryptor As ICryptoTransform = aes.CreateEncryptor(aes.Key, aes.IV)
Using ms As New MemoryStream()
Using cs As New CryptoStream(ms, encryptor, CryptoStreamMode.Write)
Using sw As New StreamWriter(cs)
sw.Write(plaintext)
End Using
End Using
' Store the encrypted data in the public static byte array
encryptedData = ms.ToArray()
Return Convert.ToBase64String(encryptedData)
End Using
End Using
End Function
Public Shared Function Decrypt(ByVal ciphertext As String, ByVal key As String) As String
Using aes As Aes = System.Security.Cryptography.Aes.Create()
aes.Key = Encoding.UTF8.GetBytes(key)
aes.IV = New Byte(15){} ' Initialization vector (IV)
Dim decryptor As ICryptoTransform = aes.CreateDecryptor(aes.Key, aes.IV)
Using ms As New MemoryStream(Convert.FromBase64String(ciphertext))
Using cs As New CryptoStream(ms, decryptor, CryptoStreamMode.Read)
Using sr As New StreamReader(cs)
Return sr.ReadToEnd()
End Using
End Using
End Using
End Using
End Function
End Class
Aes aes = Aes.Create():AES 暗号化アルゴリズムの新しいインスタンスを作成します。
Aes.Key:暗号化と復号化の両方に使用されるキー。 128ビットのような有効なサイズでなければなりません。(16バイト)192ビットまたは256ビット。
Aes.IV:初期化ベクトル(IV).NET、Java、Python、またはNode.jsを含むプロジェクトに携わるソフトウェア開発者を対象としています。 この例では、簡単のためにゼロのIVを使用しています。
MemoryStream:これは、暗号化されたデータをバイトのストリームとして扱うことを可能にします。
ランダムキーと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
using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
{
rng.GetBytes(aes.Key); // Generate a random key
rng.GetBytes(aes.IV); // Generate a random IV
}
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
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
using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
{
rng.GetBytes(aes.Key); // Generate a random key
rng.GetBytes(aes.IV); // Generate a random IV
}
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
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 Shared Function EncryptData(ByVal plaintext As String) As String
Using aes As Aes = Aes.Create()
aes.Key = New Byte(31){} ' AES-256 requires a 256-bit key (32 bytes)
aes.IV = New Byte(15){} ' 128-bit block size
Using rng As RandomNumberGenerator = RandomNumberGenerator.Create()
rng.GetBytes(aes.Key) ' Generate a random key
rng.GetBytes(aes.IV) ' Generate a random IV
End Using
Dim encryptor As ICryptoTransform = aes.CreateEncryptor(aes.Key, aes.IV)
Using ms As New MemoryStream()
Using cs As New CryptoStream(ms, encryptor, CryptoStreamMode.Write)
Using sw As New StreamWriter(cs)
sw.Write(plaintext)
End Using
End Using
Return Convert.ToBase64String(ms.ToArray())
End Using
End Using
End Function
この場合、関数が呼び出されるたびに、新しいキーとIVを生成します。 これは、同じキーがすべての操作で使用されないため、より堅牢な暗号化を提供します。 AESは、128ビット、192ビット、256ビットなどのキーサイズをサポートしています。
復号化とは、データを暗号化する逆のプロセスです。 この例では、データを復号化するために、暗号化に使用したのと同じ鍵とIVを提供する必要があります。 復号化プロセスでは、暗号化されたデータを元の形式に変換します。
以下は、暗号化されたデータを使用した例です:
public static string DecryptData(string ciphertext, byte[] key, byte[] iv)
{
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
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;
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
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 Shared Function DecryptData(ByVal ciphertext As String, ByVal key() As Byte, ByVal iv() As Byte) As String
Using aes As Aes = Aes.Create()
aes.Key = key
aes.IV = iv
Dim decryptor As ICryptoTransform = aes.CreateDecryptor(aes.Key, aes.IV)
Using ms As New MemoryStream(Convert.FromBase64String(ciphertext))
Using cs As New CryptoStream(ms, decryptor, CryptoStreamMode.Read)
Using sr As New StreamReader(cs)
Return sr.ReadToEnd()
End Using
End Using
End Using
End Using
End Function
このコードは、暗号化されたデータを元のデータに復号します。
IronPDFはシンプルで開発者に優しい.NETライブラリで、シンプルなC#コードでPDFを生成、編集、操作できるように設計されています。 これにより、開発者は次のことが可能になります。HTMLから直接PDF文書を作成.NET、CSS、JavaScriptは、レポート、請求書、その他の文書を動的に生成するのに非常に便利です。 結合、分割、そしてパスワードやデジタル署名のようなセキュリティ機能の追加までサポートするIronPDFは、.NETアプリケーションでのPDF生成のための包括的なソリューションです。
機密性の高いレポートや文書を作成する場合、PDF内のデータを暗号化してから共有する必要があります。 AES(高度暗号化標準)encryptionは、PDFファイルの内容を安全に暗号化するための完璧なソリューションです。 IronPDFとAES暗号化を組み合わせることで、PDF内のデータを保護しながら、ドキュメント自体の操作性を維持することができます。
HTMLコンテンツからPDFを生成してファイルに保存するには、ChromePdfRendererクラスを使用します:
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");
Dim htmlContent = "<h1>Confidential</h1><p>This is sensitive data.</p>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("C:\Reports\ConfidentialReport.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());
}
}
Dim pdfBytes() As Byte = File.ReadAllBytes("C:\Reports\ConfidentialReport.pdf")
Using aes As Aes = Aes.Create()
aes.Key = Encoding.UTF8.GetBytes("abcdefghijklmnop")
aes.IV = New Byte(15){}
Using encryptor = aes.CreateEncryptor(aes.Key, aes.IV)
Using ms = New MemoryStream()
Using cs = New CryptoStream(ms, encryptor, CryptoStreamMode.Write)
cs.Write(pdfBytes, 0, pdfBytes.Length)
End Using
File.WriteAllBytes("C:\Reports\ConfidentialReport.encrypted", ms.ToArray())
End Using
End Using
End Using
IronPDFとAES暗号化を統合することで、アクセス可能で暗号化されたダイナミックでセキュアなドキュメントを生成することができます。 セキュアなドキュメント生成を必要とするアプリケーションの開発であれ、機密性の高いレポートの管理であれ、IronPDFと強固な暗号化を組み合わせることで、データを保護することができます。 IronPDFはPDFでの作業を簡素化し、AESはコンテンツの安全性を保証します。
IronPDFは無料試用また、開発者が、契約する前にその機能を簡単に検討できるようにする必要があります。 あなたのプロジェクトにIronPDFを導入する準備ができたなら、ライセンスは1回限りの購入で749ドルからです。
9つの .NET API製品 オフィス文書用