Python'da Şifreleme İçin PyCryptodome Kullanma
Dijital dönüşüm çağında, güçlü kriptografi mekanizmalarinin önemi abartılamaz. Kriptografi, verinin çeşitli ağlar ve sistemler arasında dolasir cekerken guvenligini ve gizliligini saglar. PyCryptodome, kriptografik ortamda öne cikan bir Python kütüphanesidir ve GCM, CCM, EAX, SIV, OCB gibi kimlik doğrulamalı şifreleme modlarını ve birinci sınıf destek hızlandırılmış AES'i saglayan çeşitli işlevler sunar. Bu makale, PyCryptodome'un en son resmi sürümünü, özelliklerini, kullanim örneklerini, basitleştirilmiş yükleme sürecini ve çeşitli uygulamalarda etkin bir şekilde nasıl kullanılabileceğini inceler. Ayrica, PyCryptodome ile ayri bir C# kutuphanesi olan IronPDF'i kullanarak sifrelenmis PDF dosyalari oluşturacagiz.
PyCryptodome'a Genel Bakis
PyCryptodome, dusuk duzeyde kriptografik primitler iceren kendi kendine yeten bir Python paketidir. Eski PyCrypto kutuphanesinin yerine gecmesi icin tasarlandi, bircok eksikliklerini gidermekte ve kapasitesini genişletmektedir. Bir dizi genis kriptografik algoritmalar ve protokoller saglayarak, uygulamalarinda guvenlik özellikleri uygulamasi gereken geliştirici icin vazgecilmez bir arac haline gelir.
Temel Özellikler
- Genis Algoritma Destegi: PyCryptodome, AES, RSA, DSA ve daha bircok kriptografik algoritmayı kapsamli bir dizi ile destekler. Bu genis destek, geliştiricilerin çeşitli kriptografik ihtiyaçlar icin gerekli araci bulabilecegi anlamina gelir.
- Kullanım Kolaylığı: Kütüphane, açık ve kıs sayilir API'leriyle kullanıcı dostu olacak şekilde tasarlanmıştır ve sınırlı kriptografik bilgisi olanların bile uygulamalarında guvenlik özellikleri etkili bir sekilde uygulamalarına olanak tanir.
- Aktif Bakim: Onceki PyCrypto'nun aksine, PyCryptodome aktif olarak bakilmaktadir, duzenli güncellemeler ve iyilestirmeler alir, Python'un son surumleri ve guvenlik standartlarıyla uyumu saglayan bir kutuphane olarak kalir.
- Kendi Kendisini Icerir: PyCryptodome herhangi bir dis bagimliğa gerek duymadan kurulumunu kolaylaştırir ve farklı ortamlarda kullanir.
- Var Olan Kutuphanelerle Entegrasyon: PyCryptodome, diğer Python kütüphaneleri ve çerçeveleri ile sorunsuzca entegre olabilir ve çeşitli uygulamalarda yararlılığını arttırır.
Kurulum
PyCryptodome'u yüklemek, kendi kendine yeten doğasıyla basit bir süreçtir. Python'ın paket yükleyicisi olan pip üzerinden aşağıdaki komut kullanılarak kurulabilir:
pip install pycryptodomepip install pycryptodomeAna Kavramlar ve Modüller
PyCryptodome, kriptografinin farklı yönlerine hitap eden birkaç modüle organize edilmiştir. Bu modülleri anlamak, kütüphaneyi etkili bir şekilde kullanmak için esastır.
Hashleme
Hash fonksiyonları, rastgele veriden sabit boyutlu bir hash değeri üretmenin bir yolunu sağlayarak kriptografinin temelini oluşturur. PyCryptodome, Crypto.Hash modülü aracılığıyla çeşitli hash algoritmalarını destekler.
SHA-256 hash fonksiyonunun kullanımı örneği
from Crypto.Hash import SHA256
# Create a new SHA-256 hash object
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')
# Output the hexadecimal digest of the hash
print(hash_object.hexdigest())from Crypto.Hash import SHA256
# Create a new SHA-256 hash object
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')
# Output the hexadecimal digest of the hash
print(hash_object.hexdigest())
Simsiz Şifreleme
Simsiz şifreleme, hem şifreleme hem de şifre çözme için aynı anahtarın kullanılmasını içerir. PyCryptodome'un Crypto.Cipher modülü, AES, DES ve daha fazlası dahil olmak üzere birkaç simetrik şifrelemeyi destekler.
AES şifreleme ve şifre çözme örneği
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# Generate a random AES key
key = get_random_bytes(16) # 16 bytes for AES-128
# Create a new AES cipher in EAX mode for encryption
cipher = AES.new(key, AES.MODE_EAX)
data = b'Secret Message'
# Encrypt the data and get the nonce, ciphertext and tag
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)
# Create a new AES cipher in EAX mode for decryption
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt(ciphertext)
# Verify the authenticity of the message
try:
cipher.verify(tag)
print("The message is authentic:", plaintext)
except ValueError:
print("Key incorrect or message corrupted")from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# Generate a random AES key
key = get_random_bytes(16) # 16 bytes for AES-128
# Create a new AES cipher in EAX mode for encryption
cipher = AES.new(key, AES.MODE_EAX)
data = b'Secret Message'
# Encrypt the data and get the nonce, ciphertext and tag
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)
# Create a new AES cipher in EAX mode for decryption
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt(ciphertext)
# Verify the authenticity of the message
try:
cipher.verify(tag)
print("The message is authentic:", plaintext)
except ValueError:
print("Key incorrect or message corrupted")
Asimetrik Şifreleme
Asimetrik şifreleme, şifreleme için bir genel anahtar ve şifre çözme için bir özel anahtar kullanan bir anahtar çifti kullanır. PyCryptodome'un Crypto.PublicKey modülü, RSA, DSA ve ECC (Eliptik Eğri Kriptografisi) desteği sağlar.
RSA şifreleme ve şifre çözme örneği
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# Generate an RSA key pair
key = RSA.generate(2048)
public_key = key.publickey()
# Encrypt the message using the public key
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(b'Secret Message')
# Decrypt the message using the private key
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext)from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# Generate an RSA key pair
key = RSA.generate(2048)
public_key = key.publickey()
# Encrypt the message using the public key
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(b'Secret Message')
# Decrypt the message using the private key
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext)
Anahtar Türetilmesi
Anahtar türetme fonksiyonları, bir parola veya parola cümlesinden kriptografik anahtarlar üretir. Bu, özellikle parola tabanlı şifrelemede faydalıdır. PyCryptodome, PBKDF2, scrypt ve diğer anahtar türetme algoritmalarını destekler.
PBKDF2 kullanma örneği
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
# Define a password and generate a salt
password = b'my secret password'
salt = get_random_bytes(16)
# Derive a key from the password and salt using PBKDF2
key = PBKDF2(password, salt, dkLen=32, count=1000000)
print(key)from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
# Define a password and generate a salt
password = b'my secret password'
salt = get_random_bytes(16)
# Derive a key from the password and salt using PBKDF2
key = PBKDF2(password, salt, dkLen=32, count=1000000)
print(key)
Kullanım Alanları
Parola Yönetimi
Parola yöneticileri, kullanıcı parolalarını güvenli bir şekilde saklamak ve almak için PyCryptodome'un anahtar türetme fonksiyonlarından faydalanır. PBKDF2 gibi güçlü anahtar türetme algoritmaları kullanarak, geliştiriciler saklanan parolaların kaba kuvvet ataklarına dirençli olmasını sağlayabilir.
Parolaların güvenli hale getirilmesi örneği
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES
# Derive a strong key from a password
password = b'user_password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)
# Encrypt the password before storing
cipher = AES.new(key, AES.MODE_EAX)
stored_password = b'ActualPassword'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(stored_password)
# Store ciphertext, nonce, salt, and tag securely
password_data = {
'ciphertext': ciphertext,
'nonce': nonce,
'salt': salt,
'tag': tag
}
# Decrypt the password when needed
key = PBKDF2(password, password_data['salt'], dkLen=32, count=1000000)
cipher = AES.new(key, AES.MODE_EAX, nonce=password_data['nonce'])
plaintext = cipher.decrypt(password_data['ciphertext'])
# Verify the authenticity of the password
try:
cipher.verify(password_data['tag'])
print("The stored password is authentic:", plaintext)
except ValueError:
print("Key incorrect or password corrupted")from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES
# Derive a strong key from a password
password = b'user_password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)
# Encrypt the password before storing
cipher = AES.new(key, AES.MODE_EAX)
stored_password = b'ActualPassword'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(stored_password)
# Store ciphertext, nonce, salt, and tag securely
password_data = {
'ciphertext': ciphertext,
'nonce': nonce,
'salt': salt,
'tag': tag
}
# Decrypt the password when needed
key = PBKDF2(password, password_data['salt'], dkLen=32, count=1000000)
cipher = AES.new(key, AES.MODE_EAX, nonce=password_data['nonce'])
plaintext = cipher.decrypt(password_data['ciphertext'])
# Verify the authenticity of the password
try:
cipher.verify(password_data['tag'])
print("The stored password is authentic:", plaintext)
except ValueError:
print("Key incorrect or password corrupted")
IronPDF for Python
IronPDF, geliştiricilerin PDF belgelerini zahmetsizce oluşturmasına, düzenlemesine ve manipüle etmesine olanak tanıyan güçlü bir Python PDF oluşturma kütüphanesidir. HTML'yi PDF'ye dönüştürmekten birçok PDF'yi birleştirmeye kadar geniş bir fonksiyon aralığı sunar ve belge iş akışlarını otomatikleştirmek için ideal bir seçimdir. PyCryptodome ile birleştirildiğinde, kriptografik işlemler için sağlam bir kütüphane, geliştiriciler PDF belgelerine şifreleme ve dijital imzalar gibi güvenli özellikler ekleyebilir. Bu entegrasyon, özellikle finansal, yasal veya gizli ortamlarda yüksek güvenlik ve veri bütünlüğü gerektiren uygulamalar için kullanışlıdır.
IronPDF'i kurmak için Python paket yöneticisi pip kullanabilirsiniz. Başlamak için işte yapmanız gerekenler:
pip install ironpdfpip install ironpdf
Kurulumdan sonra IronPDF'i kullanmaya başlayabilir ve PDF'leri oluşturup manipüle edebilirsiniz. Aşağıda, IronPDF ile bir PDF oluşturmayı ve ardından PyCryptodome kullanarak şifrelemeyi gösteren basit bir örnek verilmiştir:
from ironpdf import ChromePdfRenderer
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os
# Create a new PDF renderer
renderer = ChromePdfRenderer()
# Render a URL as a PDF and save it
pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/")
pdfFromUrl.SaveAs("output.pdf")
# Function to encrypt a file using AES
def encrypt_file(file_name, key):
cipher = AES.new(key, AES.MODE_CBC) # Use AES in CBC mode
iv = cipher.iv
with open(file_name, 'rb') as f:
data = f.read()
encrypted_data = iv + cipher.encrypt(pad(data, AES.block_size))
with open(file_name + '.enc', 'wb') as f:
f.write(encrypted_data)
# Example usage
key = os.urandom(16) # AES key must be either 16, 24, or 32 bytes long
encrypt_file("output.pdf", key)from ironpdf import ChromePdfRenderer
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os
# Create a new PDF renderer
renderer = ChromePdfRenderer()
# Render a URL as a PDF and save it
pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/")
pdfFromUrl.SaveAs("output.pdf")
# Function to encrypt a file using AES
def encrypt_file(file_name, key):
cipher = AES.new(key, AES.MODE_CBC) # Use AES in CBC mode
iv = cipher.iv
with open(file_name, 'rb') as f:
data = f.read()
encrypted_data = iv + cipher.encrypt(pad(data, AES.block_size))
with open(file_name + '.enc', 'wb') as f:
f.write(encrypted_data)
# Example usage
key = os.urandom(16) # AES key must be either 16, 24, or 32 bytes long
encrypt_file("output.pdf", key)Bu senaryo, IronPDF kullanarak basit bir PDF oluşturulmasını ve ardından PyCryptodome'dan AES kullanılarak şifrelenmesini gösterir ve daha karmaşık ve güvenli PDF işleme uygulamaları geliştirmek için bir temel sağlar.

Sonuç
Sonuç olarak, PyCryptodome, geliştiriciler için kriptografik işlemleri önemli ölçüde artıran güçlü ve çok yönlü bir Python kütüphanesidir; geniş bir algoritma yelpazesi ve IronPDF gibi diğer araçlarla kolay entegrasyon sunar. Geniş kapsamlı özellik seti, otantikli şifreleme modları, simetrik ve asimetrik şifreleme, hashleme ve anahtar türetme desteği dahil olmak üzere, PyCryptodome modern uygulamaların sağlam güvenlik tedbirleri gereksinimlerini karşılar. Kullanım kolaylığı, aktif bakımı ve bağımsız doğası ile, parola yönetiminden güvenli doküman üretimi ve şifrelemeye kadar çeşitli senaryolarda güvenli veri işleme uygulamak için vazgeçilmez bir araçtır; artan dijital dünyada veri bütünlüğünü ve gizliliğini sağlar.
IronPDF lisansı hakkında detaylar için IronPDF lisans sayfasına bakın. Daha fazlasını keşfetmek için HTML'yi PDF'ye dönüştürme üzerine kapsamlı eğitimimize bakın.










