Altbilgi içeriğine atla
PYTHON YARDıM

Python'da Şifreleme İçin PyCryptodome Kullanma

Dijital dönüşüm çağında, sağlam kriptografik mekanizmaların önemi abartılamaz. Kriptografi, verilerin çeşitli ağlar ve sistemler üzerinden geçerken güvenliğini ve gizliliğini sağlar. PyCryptodome, GCM, CCM, EAX, SIV, OCB gibi kimlik doğrulamalı şifreleme modları ve birinci sınıf destek ile hızlandırılmış AES gibi güvenli veri işleme işlevselliği sunarak kriptografik alanda öne çıkan bir Python kütüphanesidir. Bu makale, PyCryptodome'un son resmi sürümünü inceleyerek özelliklerini, kullanım alanlarını, basitleştirilmiş kurulum sürecini ve çeşitli uygulamalarda nasıl etkili bir şekilde kullanılabileceğini ele alıyor. C# kütüphanesi IronPDF ile birlikte PyCryptodome kullanarak şifreli PDF dosyaları oluşturacağız.

PyCryptodome Tanıtımı

PyCryptodome, düşük seviyeli kriptografik ilkelere sahip kendi içinde yeterli bir Python paketidir. Eski PyCrypto kütüphanesinin bir yedekleme sürümü olarak tasarlandı, birçok eksikliğini gidermekte ve yeteneklerini genişletmektedir. Geliştiricilerin uygulamalarında güvenlik özelliklerini uygulamaları gerektiğinde vazgeçilmez bir araç olan geniş bir kriptografik algoritmalar ve protokoller yelpazesi sunar.

Başlıca Özellikler

  1. Geniş Algoritma Desteği: PyCryptodome, AES, RSA, DSA ve daha birçok kriptografik algoritmanın kapsamlı bir kütüphane desteğine sahiptir. Bu kapsamlı destek, geliştiricilerin çeşitli kriptografik ihtiyaçlar için gerekli araçları bulmasını sağlar.
  2. Kullanım Kolaylığı: Kütüphane, açık ve öz API'si ile kullanıcı dostu olacak şekilde tasarlanmıştır, bu da sınırlı kriptografik bilgiye sahip kişilerin dahi güvenlik özelliklerini etkili bir şekilde uygulamasını sağlar.
  3. Aktif Bakım: Önceki PyCrypto'ya kıyasla, PyCryptodome aktif olarak sürdürülen ve düzenli güncellemelerle geliştirilmekte olup, en son Python sürümleriyle ve güvenlik standartlarıyla uyumluluğu garanti eder.
  4. Kendi Bağımsız: PyCryptodome, harici bir bağımlılık gerektirmez, bu da kurulumunu farklı ortamlarda basit ve kolay hale getirir.
  5. Mevcut Kütüphanelerle Entegrasyon: PyCryptodome, diğer Python kütüphaneleri ve çerçeveleri ile sorunsuz bir şekilde entegre edilebilir, bu da onu çeşitli uygulamalarda daha kullanışlı hale getirir.

Kurulum

PyCryptodome'un kurulumu, kendi içinde yeterli yapısı sayesinde basit bir süreçtir. Aşağıdaki komutu kullanarak, Python'un paket yükleyicisi pip aracılığıyla yüklenebilir:

pip install pycryptodome
pip install pycryptodome
SHELL

Temel Kavramlar ve Modüller

PyCryptodome, her biri kriptografinin farklı yönlerini kapsayan çeşitli modüllere ayrılmıştır. Bu modüllerin anlaşılması, kütüphanenin etkili bir şekilde kullanılması için kritik önem taşır.

Hashleme

Hash fonksiyonları, keyfi verilerden sabit boyutta bir hash değeri üretmenin bir yolu olan kriptografinin temelidir. PyCryptodome, çeşitli hash algoritmalarını Crypto.Hash modülü aracılığıyla destekler.

SHA-256 Hash Fonksiyonunu Kullanma Ö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())
PYTHON

PyCryptodome (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - Hash Çıktısı

Sempatik Şifreleme

Sempatik şifreleme, şifreleme ve çözme işlemi için aynı anahtarın kullanıldığı bir süreçtir. PyCryptodome'un Crypto.Cipher modülü, AES, DES ve daha fazlası dahil olmak üzere birkaç simetrik şifrelemeyi destekler.

AES Şifreleme ve Çö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")
PYTHON

PyCryptodome (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - AES Çıktısı

Asimetrik Şifreleme

Asimetrik şifreleme, şifreleme için bir genel anahtar ve çözme için bir özel anahtar kullanır. PyCryptodome'un Crypto.PublicKey modülü, RSA, DSA ve ECC (Eliptik Eğri Kriptografisi) desteği sağlar.

RSA Şifreleme ve Çö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)
PYTHON

PyCryptodome (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - RSA Çıktısı

Anahtar Türetme

Anahtar türetme fonksiyonları, bir parola veya parola cümlesinden kriptografik anahtarlar üretir. Bu, parola tabanlı şifrelemede özellikle kullanışlıdır. PyCryptodome, PBKDF2, scrypt ve diğer anahtar türetme algoritmalarını destekler.

PBKDF2 Kullanım Ö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)
PYTHON

PyCryptodome (Geliştiriciler İçin Nasıl Çalışır): Şekil 4 - PBKDF2 Çıktısı

Kullanım Alanları

Parola Yönetimi

Parola yöneticileri, kullanıcı parolalarını güvenli bir şekilde depolamak ve almak için PyCryptodome'un anahtar türetme fonksiyonlarından yararlanır. PBKDF2 gibi güçlü anahtar türetme algoritmalarını kullanarak, geliştiriciler depolanan parolaların kaba kuvvet saldırılarına karşı dayanıklı olmasını sağlar.

Parolaları Güvence Altına Alma Ö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")
PYTHON

PyCryptodome (Geliştiriciler İçin Nasıl Çalışır): Şekil 5 - Şifre Şifreleme Çıktısı

IronPDF for Python

IronPDF, geliştiricilerin PDF belgelerini zahmetsizce oluşturmasını, düzenlemesini ve manipüle etmesini sağlayan güçlü bir Python PDF oluşturma kütüphanesidir. HTML'den PDF'ye dönüştürmeden çoklu PDF'leri birleştirmeye kadar geniş bir işlevsellik yelpazesi sunar ve belge iş akışlarının otomasyonu için ideal bir seçimdir. PyCryptodome gibi kriptografik işlemler için sağlam bir kütüphane ile birleştirildiğinde, geliştiriciler PDF belgelerine şifreleme ve dijital imza gibi güvenli özellikler ekleyebilir. Bu entegrasyon, finansal, yasal veya gizli ortamlar gibi yüksek güvenlik seviyeleri ve veri bütünlüğü gerektiren uygulamalar için özellikle faydalıdır.

IronPDF'i yüklemek için Python paket yöneticisi pip kullanabilirsiniz. Başlamak için:

pip install ironpdf

PyCryptodome (Geliştiriciler İçin Nasıl Çalışır): Şekil 6 - IronPDF

Kurulumun ardından, PDF oluşturmak ve düzenlemek için IronPDF'i kullanmaya başlayabilirsiniz. Aşağıda, IronPDF'i kullanarak bir PDF oluşturarak, ardından PyCryptodome ile AES kullanarak nasıl şifreleyeceğinize yönelik basit bir örnek bulunmaktadır.

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)
PYTHON

Bu senaryo, IronPDF kullanarak basit bir PDF oluşturmayı ve PyCryptodome'dan AES kullanarak bu PDF'yi şifrelemeyi, daha karmaşık ve güvenli PDF işleme uygulamaları oluşturmak için bir temel sağlar.

PyCryptodome (Geliştiriciler İçin Nasıl Çalışır): Şekil 7 - Şifrelenmiş Dosya Çıktısı

Sonuç

Sonuç olarak, PyCryptodome, geliştiriciler için geniş bir algoritma yelpazesi ve IronPDF gibi diğer araçlarla kolay entegrasyon sağlayan kriptografik işlemleri büyük ölçüde artıran güçlü ve çok yönlü bir Python kütüphanesidir. Yetkilendirilmiş şifreleme modlarına, sembolik ve asimetrik şifrelemeye, hashlemeye ve anahtar türetmeye destek gibi kapsamlı özellik seti ile PyCryptodome, modern uygulamalar için sağlam güvenlik önlemleri gerektiren ihtiyaçlara cevap verir. Kullanım kolaylığı, aktif bakımı ve kendi içinde yeterli yapısı ile çeşitli senaryolarda güvenli veri işleme uygulamalarını, parola yönetiminden güvenli belge oluşturma ve şifrelemeye kadar olanak tanıyan vazgeçilmez bir araçtır, artan dijital dünyada veri bütünlüğü ve gizliliği sağlar.

IronPDF lisans bilgileri için, lütfen IronPDF lisans sayfasına bakın. Daha fazla keşfetmek için HTML'den PDF'ye dönüştürme hakkındaki detaylı öğreticimizi inceleyin.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara