Criptare e decriptare file in Python con cryptography

Mattepuffo's logo
Criptare e decriptare file in Python con cryptography

Criptare e decriptare file in Python con cryptography

Il modulo cryptography è probabilmente il modulo più completo di crittografia per Python.

A me risultava già installato, segno che viene usato da qualche altro programma; ma per stare sicuri:

# pip3 install cryptography

Adesso create un file con dentro una qualsiasi cosa scritta; è il nostro file di partenza.

Dopo di che:

import os
import base64
from cryptography.fernet import Fernet
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

def creaPwd(password, salt):
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,
        salt=salt,
        iterations=100000,
        backend=default_backend()
    )
    return base64.urlsafe_b64encode(kdf.derive(password))

password = b"LA_VOSTRA_PASSWORD"

# CIFRATURA
with open("/home/matte-server/Scrivania/file.txt", "r") as fileDaCriptare:
    messaggio = fileDaCriptare.read()
salt = os.urandom(16)
key = creaPwd(password, salt)
cipherSuite = Fernet(key)
cipherText = cipherSuite.encrypt(messaggio.encode("utf-8"))
cipherTextUtf8 = base64.b64encode(salt).decode('utf-8') + cipherText.decode('utf-8')

# VALORE CRIFRATO SU NUOVO FILE
encryptedFile = open("/home/matte-server/Scrivania/file_criptato.txt", "w")
encryptedFile.write(cipherTextUtf8)
encryptedFile.close()

# DECIFRATURA
with open("/home/matte-server/Scrivania/file_criptato.txt", "r") as fileDaCriptare:
    messaggio = fileDaCriptare.read()
salt = base64.b64decode(cipherTextUtf8[:24].encode("utf-8"))
cipherSuite = Fernet(creaPwd(password, salt))
plainText = cipherSuite.decrypt(cipherTextUtf8[24:].encode("utf-8"))
plainTextUtf8 = plainText.decode("utf-8")

# VALORE DECIFRATO SU NUOVO FILE
encryptedFile = open("/home/matte-server/Scrivania/file_decriptato.txt", "w")
encryptedFile.write(plainTextUtf8)
encryptedFile.close()

Definiamo una piccola funzione solo per creare una password per la cifratura / decifratura.

Poi eseguiamo le varie operazioni; al termine mi ritrovo con questi files:

$ ls -l
totale 20
-rw-r--r-- 1 matte-server matte-server  144 gen  6 16:58 file_criptato.txt
-rw-r--r-- 1 matte-server matte-server   22 gen  6 16:58 file_decriptato.txt
-rw-r--r-- 1 matte-server matte-server   22 gen  6 16:57 file.txt

$ cat file.txt 
messagio da criptare!

$ cat file_criptato.txt
5dhez1TFDYQ0QvH1HoaOvQ==gAAAAABcMiWiJcTwaIOIQ609AtDvgzSOPTjVoV-
LmO3Cn51PJ_Q4pIZHjWPM8KMuvw5lK7ScAql2E4jmkAL3OvVmbcsq6lZHN_FvWf
-P9_PZWvLe-adggk8=

$ cat file_decriptato.txt
messagio da criptare!

Enjoy!


Condividi

Commentami!