Oggi vi voglio segnalare l'implementazione pure-python di due algoritmi abbastanza celebri: Blowfish e Rijndael (per gli amici AES).
Grazie all'impegno di Ivan Voras è possibile utilizzare Blowfish per testi di lunghezza arbitraria.
Esempio (test1a.py)
import blowfish Questo semplice codice mostra abbastanza bene l'uso di questo modulo.
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)
È importante ricordarsi di inizializzare sempre CTR altrimenti si rimane per mesi a sbattere la testa su un errore di encoding molto antipatico.
Jeffrey Clement ci porta invece un simpatico modulo per utilizzare AES
Esempio (test2a.py)
import rijndael as r Questo semplice codice mostra abbastanza bene l'uso di questo modulo.
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)
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.