Sto cercando di creare uno script di crittografia / decrittografia di base per uso personale e funziona perfettamente. Sto postando questo nella sezione infosec perché la mia domanda ruota attorno a quanto sia facile rompere la crittografia.
NOTA: conosco poco la crittologia, quindi la domanda semplicistica.
Ecco un rapido mock-up del mio codice:
from Crypto.Cipher import AES
import hashlib
from random import randint
import struct
from getpass import getpass
import os
infile = sys.argv[1]
password = hashlib.sha256(getpass('[*] Enter Password: ')).digest()
ivector = ''.join(chr(randint(0, 0xFF)) for i in range(16))
encryptor = AES.new(password, AES.MODE_CBC, ivector)
with open(infile, 'rb') as infile:
to_encrypt = infile.read()
to_encrypt += 'password_is_correct'
while len(to_encrypt)%16 != 0:
to_encrypt += ' ' #Pad file to a multiple of 16 for encryption
encrypted = encryptor.encrypt(to_encrypt)
size = os.path.getsize(infile)
with open(infile, 'wb') as outfile:
outfile.write(struct.pack(size, '<Q'))
outfile.write(ivector)
outfile.write(encrypted)
print '[*] Encryption Completed!'
Per riassumere. Questo codice crittograferà un file con un vettore di inizializzazione casuale e una password fornita dall'utente. Leggerà il file da crittografare e aggiungerà la stringa "password_is_correct" alla fine della stringa. Al momento della decodifica, il vettore di inizializzazione verrà letto dal file e verrà acquisita una password dall'utente. Se la password è corretta, la stringa "password_is_correct" dovrebbe essere nella stringa decrittografata. È un metodo valido una verifica della password? Questo rappresenta un qualche tipo di rischio per l'integrità del file per facilitare il processo di cracking dei file?
Il codice completo può essere trovato qui .