Crittografia pure-python? Sì grazie

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(ctxt)
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(ctxt)
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.

Il tuo voto: Nessuno Media voti: 3 (2 voti)

Fatal error: Call to undefined function date_now() in /accounts/fittipaldi/www/python-it.org/sites/all/modules/date/date_timezone/date_timezone.module on line 184