Estoy tratando de hacer un script básico de cifrado / descifrado para uso personal, y funciona perfectamente bien. Estoy publicando esto en la sección de infosec porque mi pregunta gira en torno a qué tan fácil es romper el cifrado.
NOTA: Sé poco sobre criptología, de ahí la pregunta simplista.
Aquí hay una rápida maqueta de mi código:
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!'
Para resumir. Este código cifrará un archivo con un vector de inicialización aleatorio y una contraseña proporcionada por el usuario. Leerá el archivo para cifrar y agregará la cadena "password_is_correct" al final de la cadena. Una vez descifrado, el vector de inicialización se leerá del archivo y se tomará una contraseña del usuario. Si la contraseña es correcta, entonces la cadena "password_is_correct" debería estar en la cadena descifrada. ¿Es este un método válido una verificación de contraseña? ¿Esto supone algún tipo de riesgo para la integridad del archivo que facilita el proceso de descifrado de archivos?
El código completo se puede encontrar aquí .