Altbilgi içeriğine atla
PYTHON YARDıM

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

  1. 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.
  2. 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.
  3. 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.
  4. Kendi Kendisini Icerir: PyCryptodome herhangi bir dis bagimliğa gerek duymadan kurulumunu kolaylaştırir ve farklı ortamlarda kullanir.
  5. 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 pycryptodome
pip install pycryptodome
SHELL

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

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

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

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

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

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

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

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

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

PyCryptodome (Geliştiriciler İçin Nasıl Çalışır): Şekil 5 - Şifre Güvende Çıkışı

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 ironpdf
pip install ironpdf
SHELL

PyCryptodome (Geliştiriciler İçin Nasıl Çalışır): Şekil 6 - 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)
PYTHON

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.

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

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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

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