cryptography
és a hashlib
könyvtárak széleskörű funkcionalitást biztosítanak ezek megvalósításához. Az alábbiakban bemutatom néhány alapvető kriptográfiai algoritmus implementációját példákon keresztül.
A hash algoritmusok adatokat fix méretű „ujjlenyomattá” alakítanak. Ez hasznos jelszavak tárolásánál vagy adatintegritás ellenőrzésére.
import hashlib
# Szöveg, amit hashelni szeretnénk
data = "Hello, kriptográfia!"
# SHA-256 hash generálása
hash_object = hashlib.sha256(data.encode())
hash_hex = hash_object.hexdigest()
print("SHA-256 hash:", hash_hex)
Az AES (Advanced Encryption Standard) algoritmus egy szimmetrikus titkosítási módszer.
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
from cryptography.hazmat.backends import default_backend
# Kulcs és inicializáló vektor (IV) (16 byte hosszú)
key = b"mysecretkey123456"
iv = b"initialvector123"
# Üzenet titkosítása
data = b"Ez egy titkos üzenet."
# Padding az adathoz
padder = padding.PKCS7(128).padder()
padded_data = padder.update(data) + padder.finalize()
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()
encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
print("Titkosított adat:", encrypted_data)
# Üzenet visszafejtése
decryptor = cipher.decryptor()
decrypted_padded_data = decryptor.update(encrypted_data) + decryptor.finalize()
# Padding eltávolítása
unpadder = padding.PKCS7(128).unpadder()
decrypted_data = unpadder.update(decrypted_padded_data) + unpadder.finalize()
print("Eredeti üzenet:", decrypted_data.decode())
Az RSA egy nyilvános kulcsú titkosítási módszer. Az alábbi példa bemutatja az RSA kulcsgenerálást és titkosítást.
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
# RSA kulcspár generálása
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)
public_key = private_key.public_key()
# Üzenet titkosítása a nyilvános kulccsal
message = b"RSA titkos üzenet"
encrypted = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("Titkosított üzenet:", encrypted)
# Üzenet visszafejtése a privát kulccsal
decrypted = private_key.decrypt(
encrypted,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("Visszafejtett üzenet:", decrypted.decode())
A digitális aláírás lehetővé teszi az üzenetek hitelességének és integritásának ellenőrzését.
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
# Üzenet
message = b"Ez egy aláírt üzenet."
# Aláírás a privát kulccsal
signature = private_key.sign(
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Aláírás:", signature)
# Aláírás ellenőrzése a nyilvános kulccsal
try:
public_key.verify(
signature,
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Az aláírás érvényes.")
except Exception as e:
print("Az aláírás érvénytelen:", str(e))
A HMAC biztosítja az üzenetek hitelességét és integritását egy titkos kulcs segítségével.
import hmac
import hashlib
# Kulcs és üzenet
key = b"titkoskulcs"
message = b"HMAC üzenet"
# HMAC generálása
h = hmac.new(key, message, hashlib.sha256)
hmac_result = h.hexdigest()
print("HMAC:", hmac_result)