Crittografia pure-python? Si, grazie!


Articolo scritto da Simone Ramacci “Simosito” e pubblicato prima su python-it.org e poi qui per sua gentile concessione.

 Oggi vi voglio segnalare l’implementazione pure-python di due algoritmi abbastanza celebri: Blowfish e Rijndael (per gli amici AES).

Blowfish.py

Grazie all’impegno di Ivan Voras è possibile utilizzare Blowfish per testi di lunghezza arbitraria.

Esempio (test1a.py)

import blowfish 

from hashlib import sha256

testo="Ciao, come va?" 

cipher = blowfish.Blowfish(sha256('key').digest()) 

print('Cripto')

#inizializzo CTR 

cipher.initCTR() 

ctxt=cipher.encryptCTR(testo) 

print('DeCripto') 

#idem 

cipher.initCTR() 

txt=cipher.decryptCTR(ctxt) 

print(txt)

Questo semplice codice mostra abbastanza bene l’uso di questo modulo.
È importante ricordarsi di inizializzare sempre CTR altrimenti si rimane per mesi a sbattere la testa su un errore di encoding molto antipatico.

Rijndael.py

Jeffrey Clement ci porta invece un simpatico modulo per utilizzare AES

Esempio (test2a.py)

import rijndael as r
from hashlib import sha256
key=sha256('key').digest()
testo="Ciao, come va?"
print("Cripto")
ctxt=r.EncryptData(key,testo)
print("DeCripto")
txt=r.DecryptData(key,ctxt)
print(txt)

Questo semplice codice mostra abbastanza bene l’uso di questo modulo. 
Come si può notare non c’è bisogno di nessuna inizializzazione.

Performances

Per questo test è stato usato un file di 66926 byte contenente caratteri Unicode, il Romeo e Giulietta di Bandello, che ispirò l’opera di Shakespeare.

Codifica e decodifica


 Algoritmo  real time
user time
 Blowfish 0m2.812s 0m2.804s
 Rijndael 0m10.576s  0m10.381s
 Blowfish+psyco 0m1.440s 0m1.300s
Rijndael+psyco 0m2.400s 0m2.344s

 

Codifica

 Algoritmo  real time
user time
 Blowfish 0m1.477s 0m1.416s
 Rijndael 0m5.163s 0m5.040s
 Blowfish+psyco 0m0.693s 0m0.668s
Rijndael+psyco 0m1.216s 0m1.200s

 

Il computer utilizzato per il test è un dual core 1.8 GHz con 2 Gb di RAM (24.5 % già occupato).
Nello scegliere uno dei due algoritmi si tenga presente che forniscono livelli di sicurezza differenti.”

2 thoughts on “Crittografia pure-python? Si, grazie!

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...