RandomNumberGenerator C#
Bazen, PDF belgeleriyle çalışırken kendinizi rastgele sayılar veya rastgele diziler oluşturmanız gerektiğini görebilirsiniz. PDF şifreleme için rastgele sayılar ve parolalar üretmek, benzersiz dosya adları oluşturmak, tahmin edilebilir dizileri önlemek veya başka herhangi bir nedenle sayılar oluşturmak gibi durumlarda, RandomNumberGenerator C# sınıfını kullanmak, PDF oluşturma ve düzenleme projelerinizi bir üst seviyeye taşımanıza yardımcı olabilir.
Random sınıfından oluşturulan basit bir rastgele nesneye kıyasla, bu kriptografik rastgele sayı üreticisi, güvenli uygulamalardaki kriptografik işlemler için uygun olan kriptografik olarak güçlü rastgele değerler üretir.
Bu makalede, şunları inceleyeceğiz:
-
RandomNumberGenerator nedir ve neden önemlidir?
-
Kriptografik amaçlar için rastgele sayılar, rastgele diziler ve diğer rastgele veriler üretmek için C#'ta kriptografik rastgele sayı üreticisi nasıl kullanılır?
-
Üretilen sayılar ve dizileri kullanarak IronPDF ile RandomNumberGenerator'ı entegre etmenin pratik örnekleri.
- PDF uygulamalarınızda güvenliği ve profesyonelliği artırmak için ipuçları ve en iyi uygulamalar.
RandomNumberGenerator Sınıfı Nedir
IronPDF entegrasyonuna dalmadan önce, RandomNumberGenerator'ı özel kılan özelliklere kısaca göz atalım.
-
System.Security.Cryptography ad alanının bir parçasıdır.
-
Tipik Random sınıfından çok daha güvenli olan rastgele bayt şeklinde kriptografik olarak güçlü rastgele değerler üretir.
-
Öngörülemezlik gerektiren senaryolar için idealdir, örneğin güvenli belirteçler, anahtarlar, tuzlar ve benzersiz tanıtıcılar oluşturma.
-
AES-CTR DRBG, Fortuna veya OS sağlayıcı CSPRNG'ler gibi Kriptografik algoritmaları kullanır. Öngörüye karşı dirençlidir.
- Kriptografik anahtarlar oluşturma, parola üretme, güvenli belirteçler, benzersiz belge kimlikleri gibi görevler için en iyi şekilde kullanılır.
Bu güç, işletim sisteminin altında yatan güvenli rastgele sayı üreticilerine dayanmaktadır, bu da onu tahmin veya tersine mühendislik saldırılarına karşı dirençli kılmaktadır. Aynı tohum değeriyle aynı diziyi üretebilen sahte rastgele sayı üreticilerinin aksine, bu sınıf gerçek rastgelelik ve kriptografik amaçlar için tasarlanmıştır.
Neden C#'ın Random Sınıfı Yerine RandomNumberGenerator Kullanılmalı?
Birçok geliştirici, rastgele tamsayılar üretmek için C#'ın Random sınıfı ile başlar, ancak bu sınıf yüksek güvenlik gerektiren senaryolar için tasarlanmamıştır. Çıkışındaki kalıplar tahmin edilebilir, özellikle de aynı tohum değeri veya sistem zamanı kullanıldığında, üretilen sayılar tahmin edilebilir olabilir. Bu, yöntemin basit modüler aritmetik işlemler kullanarak değerleri üretmesi nedeniyle olur ve aynı girişle tekrar edebilir.
Buna karşılık, RandomNumberGenerator, .NET Framework veya temel işletim sistemi içindeki kriptografik rastgele sayı üreticilerinden türetilmiş gerçekten rastgele sayılar üretir. Bu, düşük değer önyargısını ortadan kaldırır ve genellikle, daha düşük bir sınır (örneğin, int minValue) ile özel bir üst sınır (örneğin, int maxValue) arasında eşit dağılımı sağlamak için bir atlama ve yeniden deneme stratejisi kullanır. Aşağıdaki illüstrasyon, zayıf bir RNG ve güvenli bir tanesi arasındaki farkı vurgulamaktadır.

IronPDF ile RandomNumberGenerator Kullanmanın Nedenleri
IronPDF, geliştiricilerin PDF belgeleri oluşturmasını, düzenlemesini ve güvence altına almasını sağlayan sağlam bir .NET PDF kütüphanesidir. Rastgeleliğin önemli olduğu yaygın kullanım senaryoları arasında:
-
Benzersiz Belge Tanımlayıcıları: PDF'lere izleme veya doğrulama için kriptografik olarak güvenli kimlikler ekleyin.
-
Güvenli Filigranlar: Sahtekarlığı önleyen rastgele filigranlar veya kodlar gömün.
-
Şifreleme Anahtarları veya Parolaları: PDF şifreleme için güvenli anahtarlar veya parolalar oluşturun.
- Rastgele İçerik: PDF belgelerine bütünlük doğrulaması için rastgele benzersiz belirteçler veya tuzlar ekleyin.
C#'da Güvenli Rastgele Veri Üretme Yöntemleri
İşte 128 bit (16 bayt) güvenli rastgele belirteç oluşturmanın basit bir örneği.
using System;
using System.Security.Cryptography;
public static string GenerateSecureToken(int size = 16)
{
byte[] randomBytes = new byte[size];
RandomNumberGenerator.Fill(randomBytes);
return Convert.ToBase64String(randomBytes);
}
using System;
using System.Security.Cryptography;
public static string GenerateSecureToken(int size = 16)
{
byte[] randomBytes = new byte[size];
RandomNumberGenerator.Fill(randomBytes);
return Convert.ToBase64String(randomBytes);
}
Imports System
Imports System.Security.Cryptography
Public Shared Function GenerateSecureToken(Optional ByVal size As Integer = 16) As String
Dim randomBytes(size - 1) As Byte
RandomNumberGenerator.Fill(randomBytes)
Return Convert.ToBase64String(randomBytes)
End Function
Bu yöntem, güvenli bir bayt dizisi oluşturur ve bunu Base64 dizesi olarak döndürür — birim testlerde, dosya adlarında veya güvenli tanıtıcılarda gömme veya izleme için mükemmeldir.
Pratik Örnek: PDF Belgelerine Benzersiz Belge Kimlikleri Eklemek
Her sayfaya benzersiz, güvenli bir belge kimliği mühürlenmiş bir PDF oluşturmak için RandomNumberGenerator ve IronPDF'in gücünü birleştirelim.
Adım 1: Güvenli Bir Belge Kimliği Oluşturma
string GenerateDocumentId()
{
byte[] idBytes = new byte[12]; // 96-bit ID
RandomNumberGenerator.Fill(idBytes);
return BitConverter.ToString(idBytes).Replace("-", "");
}
string GenerateDocumentId()
{
byte[] idBytes = new byte[12]; // 96-bit ID
RandomNumberGenerator.Fill(idBytes);
return BitConverter.ToString(idBytes).Replace("-", "");
}
Private Function GenerateDocumentId() As String
Dim idBytes(11) As Byte ' 96-bit ID
RandomNumberGenerator.Fill(idBytes)
Return BitConverter.ToString(idBytes).Replace("-", "")
End Function
Bu, 24 karakterlik bir onaltılık rastgele dizi üretir (örneğin "4F3A2C9B7D1E8F0A5B6C7D8E").
Adım 2: PDF Oluşturma ve Kimliği Damgalama
using IronPdf;
void CreatePdfWithSecureId()
{
var documentId = GenerateDocumentId();
var renderer = new ChromePdfRenderer();
// Add a custom footer with the document ID
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = $"<div style='text-align: center; font-size: 10px;'>Document ID: {documentId} - Generated on {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC</div>",
DrawDividerLine = true,
};
var pdf = renderer.RenderHtmlAsPdf($"<h1>Secure Document</h1><p>Document ID: {documentId}</p>");
string outputPath = $"SecurePdf_{documentId}.pdf";
pdf.SaveAs(outputPath);
Console.WriteLine($"PDF saved as {outputPath}");
}What this Code Does:
using IronPdf;
void CreatePdfWithSecureId()
{
var documentId = GenerateDocumentId();
var renderer = new ChromePdfRenderer();
// Add a custom footer with the document ID
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = $"<div style='text-align: center; font-size: 10px;'>Document ID: {documentId} - Generated on {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC</div>",
DrawDividerLine = true,
};
var pdf = renderer.RenderHtmlAsPdf($"<h1>Secure Document</h1><p>Document ID: {documentId}</p>");
string outputPath = $"SecurePdf_{documentId}.pdf";
pdf.SaveAs(outputPath);
Console.WriteLine($"PDF saved as {outputPath}");
}What this Code Does:
Imports IronPdf
Private Sub CreatePdfWithSecureId()
Dim documentId = GenerateDocumentId()
Dim renderer = New ChromePdfRenderer()
' Add a custom footer with the document ID
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = $"<div style='text-align: center; font-size: 10px;'>Document ID: {documentId} - Generated on {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC</div>",
.DrawDividerLine = True
}
Dim pdf = renderer.RenderHtmlAsPdf($"<h1>Secure Document</h1><p>Document ID: {documentId}</p>")
Dim outputPath As String = $"SecurePdf_{documentId}.pdf"
pdf.SaveAs(outputPath)
Console.WriteLine($"PDF saved as {outputPath}")
End Sub
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'What Me Code Does:
-
Kriptografik olarak güvenli, benzersiz bir belge kimliği için rastgele bir sayı üretir.
-
HTML'yi PDF'ye dönüştürerek o kimliği gömerek oluşturur.
-
Her sayfaya belge kimliği ve zaman damgası ile bir altbilgi ekler.
- Kolay izleme için dosya adında kimliği kullanarak PDF'yi kaydeder.
Tam Çalışan Kod Örneği
using IronPdf;
using IronPdf.Editing;
using System;
using System.Security.Cryptography;
class Program
{
public static void Main(string[] args)
{
// Create an instance of Program to run non-static methods
var program = new Program();
program.CreatePdfWithSecureId()
}
string GenerateDocumentId()
{
byte[] idBytes = new byte[12]; // 96-bit ID
RandomNumberGenerator.Fill(idBytes);
return BitConverter.ToString(idBytes).Replace("-", "");
}
void CreatePdfWithSecureId()
{
var documentId = GenerateDocumentId();
var renderer = new ChromePdfRenderer();
// Add a custom footer with the document ID
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = $"<div style='text-align: center; font-size: 10px;'>Document ID: {documentId} - Generated on {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC</div>",
DrawDividerLine = true,
};
var pdf = renderer.RenderHtmlAsPdf($"<h1>Secure Document</h1><p>Document ID: {documentId}</p>");
string outputPath = $"SecurePdf_{documentId}.pdf";
pdf.SaveAs(outputPath);
Console.WriteLine($"PDF saved as {outputPath}");
}
}
using IronPdf;
using IronPdf.Editing;
using System;
using System.Security.Cryptography;
class Program
{
public static void Main(string[] args)
{
// Create an instance of Program to run non-static methods
var program = new Program();
program.CreatePdfWithSecureId()
}
string GenerateDocumentId()
{
byte[] idBytes = new byte[12]; // 96-bit ID
RandomNumberGenerator.Fill(idBytes);
return BitConverter.ToString(idBytes).Replace("-", "");
}
void CreatePdfWithSecureId()
{
var documentId = GenerateDocumentId();
var renderer = new ChromePdfRenderer();
// Add a custom footer with the document ID
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = $"<div style='text-align: center; font-size: 10px;'>Document ID: {documentId} - Generated on {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC</div>",
DrawDividerLine = true,
};
var pdf = renderer.RenderHtmlAsPdf($"<h1>Secure Document</h1><p>Document ID: {documentId}</p>");
string outputPath = $"SecurePdf_{documentId}.pdf";
pdf.SaveAs(outputPath);
Console.WriteLine($"PDF saved as {outputPath}");
}
}
Imports IronPdf
Imports IronPdf.Editing
Imports System
Imports System.Security.Cryptography
Friend Class Program
Public Shared Sub Main(ByVal args() As String)
' Create an instance of Program to run non-static methods
'INSTANT VB NOTE: The variable program was renamed since it may cause conflicts with calls to static members of the user-defined type with this name:
Dim program_Conflict As New Program()
program_Conflict.CreatePdfWithSecureId()
End Sub
Private Function GenerateDocumentId() As String
Dim idBytes(11) As Byte ' 96-bit ID
RandomNumberGenerator.Fill(idBytes)
Return BitConverter.ToString(idBytes).Replace("-", "")
End Function
Private Sub CreatePdfWithSecureId()
Dim documentId = GenerateDocumentId()
Dim renderer = New ChromePdfRenderer()
' Add a custom footer with the document ID
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = $"<div style='text-align: center; font-size: 10px;'>Document ID: {documentId} - Generated on {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC</div>",
.DrawDividerLine = True
}
Dim pdf = renderer.RenderHtmlAsPdf($"<h1>Secure Document</h1><p>Document ID: {documentId}</p>")
Dim outputPath As String = $"SecurePdf_{documentId}.pdf"
pdf.SaveAs(outputPath)
Console.WriteLine($"PDF saved as {outputPath}")
End Sub
End Class
Çıktı

Gelişmiş Kullanım Durumu: Rastgele Anahtarlarla Güvenli PDF Şifreleme
IronPDF, PDF şifrelemeyi destekler ve güvenli PDF oluşturma için güçlü destek sunar. RandomNumberGenerator'ı kullanarak şifreleme için güçlü parolalar veya anahtarlar oluşturabilirsiniz:
using IronPdf;
using IronPdf.Editing;
using System;
using System.Security.Cryptography;
class Program
{
public static void Main(string[] args)
{
// Create an instance of Program to run non-static methods
var program = new Program();
program.CreateEncryptedPdf();
}
string GenerateSecurePassword(int length = 12)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
byte[] data = new byte[length];
RandomNumberGenerator.Fill(data);
char[] result = new char[length];
for (int i = 0; i < length; i++)
{
result[i] = chars[data[i] % chars.Length];
}
return new string(result);
}
void CreateEncryptedPdf()
{
string password = GenerateSecurePassword();
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential PDF</h1><p>Access is restricted.</p>");
// Set security settings
pdf.SecuritySettings.UserPassword = password;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
string filePath = "EncryptedSecurePdf.pdf";
pdf.SaveAs(filePath);
Console.WriteLine($"Encrypted PDF saved to {filePath} with password: {password}");
}
}
using IronPdf;
using IronPdf.Editing;
using System;
using System.Security.Cryptography;
class Program
{
public static void Main(string[] args)
{
// Create an instance of Program to run non-static methods
var program = new Program();
program.CreateEncryptedPdf();
}
string GenerateSecurePassword(int length = 12)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
byte[] data = new byte[length];
RandomNumberGenerator.Fill(data);
char[] result = new char[length];
for (int i = 0; i < length; i++)
{
result[i] = chars[data[i] % chars.Length];
}
return new string(result);
}
void CreateEncryptedPdf()
{
string password = GenerateSecurePassword();
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential PDF</h1><p>Access is restricted.</p>");
// Set security settings
pdf.SecuritySettings.UserPassword = password;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
string filePath = "EncryptedSecurePdf.pdf";
pdf.SaveAs(filePath);
Console.WriteLine($"Encrypted PDF saved to {filePath} with password: {password}");
}
}
Imports IronPdf
Imports IronPdf.Editing
Imports System
Imports System.Security.Cryptography
Friend Class Program
Public Shared Sub Main(ByVal args() As String)
' Create an instance of Program to run non-static methods
'INSTANT VB NOTE: The variable program was renamed since it may cause conflicts with calls to static members of the user-defined type with this name:
Dim program_Conflict As New Program()
program_Conflict.CreateEncryptedPdf()
End Sub
Private Function GenerateSecurePassword(Optional ByVal length As Integer = 12) As String
Const chars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"
Dim data(length - 1) As Byte
RandomNumberGenerator.Fill(data)
Dim result(length - 1) As Char
For i As Integer = 0 To length - 1
result(i) = chars.Chars(data(i) Mod chars.Length)
Next i
Return New String(result)
End Function
Private Sub CreateEncryptedPdf()
Dim password As String = GenerateSecurePassword()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential PDF</h1><p>Access is restricted.</p>")
' Set security settings
pdf.SecuritySettings.UserPassword = password
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
Dim filePath As String = "EncryptedSecurePdf.pdf"
pdf.SaveAs(filePath)
Console.WriteLine($"Encrypted PDF saved to {filePath} with password: {password}")
End Sub
End Class
Bu yöntem, işletim sisteminin RNG'sinin varsayılan uygulamasını kullanır ve kriptografik işlemler için uygun bir parola üretir.
Bu, oluşturulan güvenli parolayı uygulayacak, böylece yalnızca parolalara erişimi olan kullanıcılar belgeyi görüntüleyebilecektir.

Ayrıca, belirlediğimiz izinlerle şifrelenmiş, güvenli bir belgeyle kalacağız:

En İyi Uygulamalar ve İpuçları
-
Güvenlikle ilgili her şey için her zaman RandomNumberGenerator kullanın. Kimlikler, belirteçler veya parolalar için Random'dan kaçının.
-
Hassas verileri günlüklerde veya kullanıcıya yönelik iletilerde tutmayın, ancak izlemek ve denetlemek için yeterli bilgi kaydedin.
-
Daha iyi izlenebilirlik için rastgele kimliklerin yanında zaman damgaları ve diğer meta verileri kullanmayı düşünün.
-
Belgelerinizi korumak için IronPDF'in yerleşik güvenlik özelliklerini rastgele anahtarlarla birleştirin.
- Bağlamınızda kullanılabilirliği sağlamak için rastgele veri uzunluğunu ve kodlamayı doğrulayın (örneğin, dosya adları, URL'ler, barkodlar).
Özet
C#'ın RandomNumberGenerator sınıfıyla IronPDF'i entegre etmek, modern güvenlik standartlarına uygun, güvenli, benzersiz PDF'ler oluşturmanıza olanak tanır. Benzersiz kimlikler damgalamak, şifreleme anahtarları oluşturmak veya güvenli belirteçleri eklemek gibi işlemler yapıyorsanız, bu yaklaşım size yardımcı olur:
-
Belge sahteciliğini önlemek
-
İzlenebilirliği artırmak
- PDF'lerinizdeki hassas verileri güvence altına almak
Bu sınıfın kriptografik gücünü IronPDF'in çok yönlü PDF araçlarıyla birleştirerek, PDF çözümleriniz daha güvenli ve profesyonel hale gelir.
Kendiniz Deneyin!
PDF güvenliğinizi artırmaya hazır mısınız? IronPDF ücretsiz denemesini deneyin ve bugün güvenli rastgele verilerle deney yapmaya başlayın!
Sıkça Sorulan Sorular
C#'da RandomNumberGenerator sınıfı nedir?
C#'daki RandomNumberGenerator sınıfı, System.Security.Cryptography isim alanının bir parçasıdır ve kriptografik olarak güvenli rastgele sayılar oluşturmak için yöntemler sağlar. PDF şifrelemesi ve benzersiz tanımlayıcılar oluşturma gibi senaryolarda özellikle kullanışlıdır.
RandomNumberGenerator PDF projelerinde nasıl kullanılabilir?
PDF projelerinde RandomNumberGenerator, PDF şifrelemesi için güvenli parolalar oluşturmak, benzersiz dosya adları üretmek ve öngörülebilir dizileri ortadan kaldırmak için kullanılabilir; bu da belgelerinizin güvenlik ve benzersizliğini artırır.
Rastgele sayı oluşturmak için neden RandomNumberGenerator tercih edilmeli?
RandomNumberGenerator, rastgele sayı üretiminde tercih edilir çünkü kriptografik olarak güvenli sayılar üretir ve bu da onu PDF belgelerindeki şifreleme gibi güvenlik açısından hassas uygulamalar için uygun hale getirir.
RandomNumberGenerator, öngörülebilir dizileri önlemede yardımcı olabilir mi?
Evet, RandomNumberGenerator, kriptografik olarak güvenli sayılar üreterek öngörülebilir dizileri önlemeye yardımcı olur; böylelikle diziler rastgele ve kolayca tahmin edilemez hale gelir.
RandomNumberGenerator rastgele dizeler oluşturmak için uygun mu?
Evet, RandomNumberGenerator, önce rastgele baytlar üreterek ve daha sonra bunları dizelere dönüştürerek rastgele dizeler oluşturmak için kullanılabilir. Bu, PDF projelerinde güvenli parolalar veya benzersiz tanımlayıcılar oluşturmak için kullanışlıdır.
C#'da RandomNumberGenerator kullanımı için bazı örnekler nelerdir?
C#'daki RandomNumberGenerator'un kullanım örnekleri, PDF şifrelemesi, benzersiz dosya adları oluşturma, rastgele parolalar yaratma ve kriptografik olarak güvenli rastgele sayılar gerektiren herhangi bir senaryoyu içerir.
RandomNumberGenerator, PDF belgelerinin güvenliğini nasıl artırır?
RandomNumberGenerator, kriptografik olarak güvenli rastgele sayılar sağlayarak PDF belgelerinin güvenliğini artırır; bu sayılar, şifreleme anahtarları, parolalar ve belge içeriğini koruyan diğer güvenlik önlemleri için kullanılabilir.
RandomNumberGenerator'u diğer rastgele sayı üreteçlerine göre kullanmanın avantajı nedir?
RandomNumberGenerator'u diğer rastgele sayı üreteçlerine tercih etmenin avantajı, kriptografik olarak güvenli sayılar üretebilme yeteneğidir, bu da onu yüksek derecede güvenlik gerektiren, örneğin PDF dosya şifreleme gibi uygulamalar için uygun hale getirir.




